前面介绍了怎么从DLL中导出函数和变量,实际上导出类的方法也是大同小异,废话就不多说了,下面给个简单例子示范一下,也就不多做解释了。 DLL头文件: #ifndef _DLL_SAMPLE_H #define _DLL_SAMPLE_H // 通过宏来控制是导入还是导出 #ifdef _DLL_SAMPLE #define DLL_SAMPLE_API __declspec(dllexport) #else #define DLL_SAMPLE_API __declspec(dllimport) #endif // 导出/导入变量声明 DLL_SAMPLE_API class DLLClass { public: void Show(); }; #undef DLL_SAMPLE_API #endif DLL实现文件: #include "stdafx.h" #define _DLL_SAMPLE #ifndef _DLL_SAMPLE_H #include "DLLSample.h" #endif #include "stdio.h" //APIENTRY声明DLL函数入口点 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; } void DLLClass::Show() { printf("DLLClass show!"); } 应用程序调用DLL #include "DLLSample.h"
#pragma comment(lib,"DLLSample.lib") int main(int argc, char *argv[]) { DLLClass dc; dc.Show(); return 0; }
__stdcall调用约定: 1、以"?"标识函数名的开始,后跟函数名; X——void, PA——表示指针,后面的代号表明指针类型,如果相同类型的指针连续出现,以"0"代替,一个"0"代表一次重复; int Test1(char *var1,unsigned long)http://www.360doc.com/mailto:-----“?Test1@@YGHPADK@Z” void Test2() -----“?Test2@@YGXXZ” __cdecl调用约定: __fastcall调用约定: 在头文件中类的声明中添加一个友元函数: |
|