一、匯出函式
背景:匯出函式: 在dll中有一張匯出表,其中有一系列函式,這些函式叫做匯出函式。這些函式可供外部程式呼叫,即這些函式都是該dll的入口點(類似main函式)。不在匯出表中的函式,為該dll私有的函式,外部程式不能呼叫它們。
1、沒有__declspec(dllexport),將生成的測試lib庫新增到專案中,直接呼叫,會報錯:
lnk2019 無法解析的外部符號 "void __cdecl test(void)" (?test@@yaxxz),該符號在函式 main 中被引用
lnk1120 1 個無法解析的外部命令
2、正確寫法:.**件
#ifdef testdllexport
#define dllexport __declspec(dllexport)
#else
#define dllexport __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "c"
#endif
二、匯出類
只需要在class後加上_declspec(dllexport)即可實現匯出類。
1、與匯出函式類似,不加_declspec,會報錯lnk2019
2、正確寫法:.**件
#pragma once
class _declspec(dllexport) exportclass
;
.cpp檔案
#include "exportclass.h"
#include using namespace std;
exportclass::exportclass(int a)
exportclass::~exportclass()
void exportclass::testexportclass()
測試程式
#include "exportfun.h"
#include "exportclass.h"
#include int main()
輸出結果:
C DLL匯出函式
有兩種方式,一是寫def檔案,二是用 declspec dllexport 修飾。相對來說,我更喜歡用後一種方式,這樣不用多寫乙個檔案。如果呼叫dll的 也是c 的,可能這樣寫沒有什麼問題,但是delphi程式呼叫的話就有問題了,c 編譯器把函式修飾名給修改了,用depends檢視dll的話能看到原...
C DLL 建立例項 匯出類和函式
起初直接把子 declspec dllexport 放在類宣告的地方.發生 warning c4273 dll 鏈結不一致錯誤.想了挺長時間才意識到是生成lib時並標頭檔案和原檔案中對函式的名字解析名字不一樣而產生的.才想到要定義乙個巨集.有點感嘆知識不用會也會老的.下邊是 標頭檔案 testcla...
C DLL 匯出函式名
10 05 1844292.html 經常使用vc6的dependency檢視dll匯出函式的名字,會發現有dll匯出函式的名字有時大不相同,導致不同的原因大多是和編譯dll時候指定dll匯出函式的界定符有關係。vc 支援兩種語言 即c c 這也是造成dll匯出函式差異的根源 我們用vs2008新建...