因工作需要,对C++部分代码进行DLL封装。涉及到几个问题:
- 拿到手的是已经完成的项目,要对其中部分代码进行DLL封装,代码主要是类内的成员函数。所以在不改变项目其他部分的情况下,只对成员函数的具体实现封装。这里涉及到在某一个类内对其他类的调用。
- 鉴于对DLL的显式调用有些繁琐,故采用隐式调用,隐式调用我知道的有两种方法,我只用了一种,出于可移植性考虑。
DLL的创建
这里直接在新建时选择创建动态链接库即可。
第一步:新建自己的 .h 和 .cpp 文件。格式大致如下:
- 其中__declspec(dllexport),是说明被该标识符声明的函数导出至DLL,__declspec(dllimport)是说明从DLL导入,更详细的功能可以上网查找(我理解的也不是很明白)。
- extern “C” { } 是说明这里的函数按照C语言的编译规则进行编译(我是这么理解的)。更详细的功能可以上网查找。
- 其实DLL还有很多的知识,比如_stdcall与_cdecl之间的纠葛,还有与之有关的 .def 文件等。这里提一嘴,省的自己给忘了。
// dll.h
#ifndef _DLL_H_
#define _DLL_H_
#ifdef DLLEXPORT
#define DLL_API __declspec(dllexport)
#else
#define DLL_API __declspec(dllimport)
#endif //
extern "C"
{
DLL_API Function_01();
DLL_API Function_02();
}
#endif // !
这是我自己的
第二步:这里的cpp文件就和平常的一样,将函数实现放在这,不过记得要先#define DLLEXPORT,再包含头文件
// dll.cpp
#define DLLEXPORT
#include "dll.h"
DLL_API void Function_01