版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013919153/article/details/79196705
1、extern 关键字:
使用该关键字,可以使得函数名在dll中名称不变。可以使用depends工具查看dll中的导出函数。因为c++中有函数重载,所以不要加extern “C”
2、__declspec(dllexport) 将一个函数声名为导出函数
3、__declspec(dllimport) 将dll中的某函数导入到当前文件中,如果dll中没有变量,尤其是静态变量,其实也不需要。
C++导出整个类:
头文件:
#ifdef DLL_TEST_API #else #define DLL_TEST_API _declspec(dllimport) #endif Class DLL_TEST_API CDLLTest { Public: CDLLTest(); ~CDLLTest(); int Add(int a, int b); };
源文件:源文件中,定义方法或者属性和普通类一样,不需要加DLL_TEST_API
#define DLL_TEST_API _declspec(dllexport) #include “DLLTest.h”
导出部分方法:
在方法前面添加__declspec(dllexport),但是要注意,要导出构造函数和析构函数,不然定义不了对象。还有种方法,定义一个接口,返回该类的一个对象。
调用方式:
1.静态调用:
执行dll的头文件以及lib库路径:
#pragma comment(lib,”DLLTest.lib”)
2.动态调用:
首先声明一个def文件,指定库名以及要导出的函数名
LIBRARY “DLLTest”
EXPORTS
GetInstance = GetInstance
代码中加载库:
HMOUDLE hMod = LoadLibrary( _T(“DLLTest.DLL”) );
加载函数:
函数指针类型 pfGetInstance = (函数指针类型)GetProcAddress(“函数名”); //在def文件中定义的
卸载库:
FreeLibrary (hMod);