首先使用Wizard創建一個Win32 Dynamic-Link Library工程,然後定義一個簡單的C++類CInDLL.由於該類會被工程之外的文件所引用,所以需要對這個類進行引出。因為只有引出後所生成的DLL中才帶有供足夠的信息以在連接和運行時被正確引入到進程空間中。有兩種方法可以引出類,使用__declspec(dllexport)定義和使用定義文件。
下面先講使用__declspec(dllexport)的方法:將類定義改為:class __declspec(dllexport) CInDLL 就可以了。 這樣產生的工程在編譯時是正確的但是在使用時會產生錯誤,因為你包含的頭文件中也是使用__declspec(dllexport),而使用這個DLL的工程中並沒有引出這個類,而是需要引入這個類)在使用時需要將類定義改為class __declspec(dllimport) CInDLL就可以了。
使用定義文件可以有效的避免這個問題,SXS好問提示,這種方法是利用宏定義在不同的地方產生不同的編譯代碼:在頭文件中加入如下的代碼:#ifdef _CLASSINDLL #define CLASSINDLL_CLASS_DECL __declspec(dllexport)#else #define CLASSINDLL_CLASS_DECL __declspec(dllimport)#endif#endif // ClassInDLL_H//將class __declspec(dllexport) CInDLL改為class CLASSINDLL_CLASS_DECL CInDLL{ CInDLL();……}在實現這個類的CPP文件的頂部加入#define _CLASSINDLL語句。
#define _CLASSINDLLCInDLL::CInDLL(){}……
這樣一來在使用這個類時就可以不做任何改動了。