如何在Dll中導出class
說明:新建兩個工程,其中一個是dll工程(我的示例程序中這個工程名為DllClass),另一個是測試和使用dll的工程(名字為DllClassTest)
注意點:
1。Dll工程編譯完成后,將.lib和.dll文件拷貝到測試和使用dll的工程的適當目錄下(我的程序是release目錄),然后將Dll工程
中的導出類的頭文件(以下簡稱頭文件)拷貝到測試和使用dll的工程的適當目錄下(在我的程序中是拷貝到此工程文件所在目錄),然后把這個拷貝過來的頭文
件通過下面2和3進行修改。
2。在Dll工程中的頭文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示導出
在測試和使用dll的工程中的頭文件使用的是 #define DLLCLASS_API __declspec(dllimport)表示導入
3。不論Dll工程的頭文件如何實現(比如說包括內聯函數等等),
在測試和使用dll的工程中的頭文件中全部都是聲明而沒有定義(即將類成員函數的實現部分去掉)
4。在測試和使用dll的工程的那個文件中包含對dll庫的引入,分兩步:
首先在是測試和使用dll的工程的setting菜單(按ALT+F7可以調出)中的LINK選項卡中的Object/Library
modules:下填寫對 dll的連接,比如dll文件名字為DllClass.lib和DllClass.dll,則填寫
Release/DllClass.lib(注意目錄,我的程序中.lib文件是在目錄release下)。
然后,添加對頭文件的包含,比如dll文件名字為DllClass.lib和DllClass.dll,頭文件為DllClass.h,則包含頭文件為 #include "DllClass.h"
由此,就可以使用了。
相關源碼如下:
dll工程中的DllClass.h 內容:
//此處在dll的頭文件中為 dllexport,在應用文件中為dllimport
#define DLLCLASS_API __declspec(dllexport)
//導出一個類(包括其方法、屬性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};
dll工程中的DllClass.cpp內容:
#include "stdafx.h"
#include "DllClass.h"
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
CDllClass::CDllClass()
{
return;
}
void CDllClass::MSG(const char * const str)
{
MessageBox(NULL,str,"",MB_OK);
}
Dll測試工程中的DllClass.h內容:
//此處在dll的頭文件中為 dllexport,在應用文件中為dllimport
#define DLLCLASS_API __declspec(dllimport)
//導出一個類(包括其方法、屬性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};
Dll測試工程中DllClassTest.cpp內容:
首部:
#include "DllClass.h"
class DllClass;
代碼部分:
CDllClass CTest;
CTest.MSG("this is a string into dll"

;