编写DLL时一些关键词解释以及举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 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”

这样,在DLL编译时DLL_TEST_API被定义为_declspec(dllexport),而且客户端程序编译时它被定义为_declspec(dllimport)。


导出部分方法:
在方法前面添加__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);










猜你喜欢

转载自blog.csdn.net/u013919153/article/details/79196705