如何在Dll中導(dǎo)出class
說(shuō)明:新建兩個(gè)工程,其中一個(gè)是dll工程(我的示例程序中這個(gè)工程名為DllClass),另一個(gè)是測(cè)試和使用dll的工程(名字為DllClassTest)
注意點(diǎn):
1。Dll工程編譯完成后,將.lib和.dll文件拷貝到測(cè)試和使用dll的工程的適當(dāng)目錄下(我的程序是release目錄),然后將Dll工程
中的導(dǎo)出類(lèi)的頭文件(以下簡(jiǎn)稱頭文件)拷貝到測(cè)試和使用dll的工程的適當(dāng)目錄下(在我的程序中是拷貝到此工程文件所在目錄),然后把這個(gè)拷貝過(guò)來(lái)的頭文
件通過(guò)下面2和3進(jìn)行修改。
2。在Dll工程中的頭文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示導(dǎo)出
在測(cè)試和使用dll的工程中的頭文件使用的是 #define DLLCLASS_API __declspec(dllimport)表示導(dǎo)入
3。不論Dll工程的頭文件如何實(shí)現(xiàn)(比如說(shuō)包括內(nèi)聯(lián)函數(shù)等等),
在測(cè)試和使用dll的工程中的頭文件中全部都是聲明而沒(méi)有定義(即將類(lèi)成員函數(shù)的實(shí)現(xiàn)部分去掉)
4。在測(cè)試和使用dll的工程的那個(gè)文件中包含對(duì)dll庫(kù)的引入,分兩步:
首先在是測(cè)試和使用dll的工程的setting菜單(按ALT+F7可以調(diào)出)中的LINK選項(xiàng)卡中的Object/Library
modules:下填寫(xiě)對(duì) dll的連接,比如dll文件名字為DllClass.lib和DllClass.dll,則填寫(xiě)
Release/DllClass.lib(注意目錄,我的程序中.lib文件是在目錄release下)。
然后,添加對(duì)頭文件的包含,比如dll文件名字為DllClass.lib和DllClass.dll,頭文件為DllClass.h,則包含頭文件為 #include "DllClass.h"
由此,就可以使用了。
相關(guān)源碼如下:
dll工程中的DllClass.h 內(nèi)容:
//此處在dll的頭文件中為 dllexport,在應(yīng)用文件中為dllimport
#define DLLCLASS_API __declspec(dllexport)
//導(dǎo)出一個(gè)類(lèi)(包括其方法、屬性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};
dll工程中的DllClass.cpp內(nèi)容:
#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測(cè)試工程中的DllClass.h內(nèi)容:
//此處在dll的頭文件中為 dllexport,在應(yīng)用文件中為dllimport
#define DLLCLASS_API __declspec(dllimport)
//導(dǎo)出一個(gè)類(lèi)(包括其方法、屬性)
class DLLCLASS_API CDllClass {
public:
CDllClass(void);
void MSG(const char * const str);
};
Dll測(cè)試工程中DllClassTest.cpp內(nèi)容:
首部:
#include "DllClass.h"
class DllClass;
代碼部分:
CDllClass CTest;
CTest.MSG("this is a string into dll"

;