比如我已经在vs中建立了一个叫“MFCApplication1”的MFC 项目,
再要建立一个 dll 项目,
就在“解决方案资源管理器”中的“解决方案xxx”右键,
选择“新建项目”,找到“动态链接库(DLL)”添加,
比如这里我命名为“MyFirstLib”,
这样“解决方案资源管理器”中就可以看到两个项目了,
一个MFC项目,一个DLL项目,
在MyFirstLib项目中,
“头文件”右键添加,新建项目,选择“头文件(.h)”
比如这里我新建了"MyObject.h"这个头文件,
[这里主管曾教我要把生成的头文件
放到一个专门的Include的文件夹下,
我们也来这样操作一番吧]
选中MyFirstLib项目,右键选择“在文件资源管理器中打开文件夹”,
可以看到这里有"MyObject.h"这个头文件,
返回到上一层目录,也即是MyFirstLib文件夹的同级目录,
新建“Include”文件夹,继续在里面新建MyFirstLib\Include这两层文件夹,
[这样做是因为,后面我们可能还要继续新建DLL项目,
比如我一个MFC项目下要用两套相机,需要两套Dll,
所以每个DLL项目的头文件要放到相应的文件夹下]
然后我们回到“MyFirstLib文件夹”中将"MyObject.h"这个头文件,
拷贝到 "Include\MyFirstLib\Include" 路径下,
然后回到vs中,将头文件中的"MyObject.h"右键删除,
再对头文件选项右键选择“添加-现有项目”,
找到 "Include\MyFirstLib\Include" 路径下的"MyObject.h"添加上,
在菜单栏里选择的是Debug与x64,
进入到"MyObject.h"头文件中,
添加指定导出导入的代码,
#ifdef MYOBJECT_EXPORTS
#define MYOBJECT_DLLAPI __declspec(dllexport)
#else
#define MYOBJECT_DLLAPI __declspec(dllimport)
#endif
然后选中“MyFirstLib”项目,Alt+回车打开属性,
在“C/C++”的“预处理器”中的“预处理器定义”中
添加上 MYOBJECT_EXPORTS,
这个时候看编辑环境里的高亮代码颜色,
应该是导出的代码亮了,
#define MYOBJECT_DLLAPI __declspec(dllexport)
这里多谢大佬们分享的博客,不然我也整不明白导出的代码为什么不亮,
之后就是给自己要导出的结构体、类,
添加上 MYOBJECT_DLLAPI
这个放的位置网上有很多大佬分享的博客里有讲,
比如我这里的
typedef struct MYOBJECT_DLLAPI STRU_CHANNEL_INFO
{
char chChanName[40]; //通道名称
STRU_CHANNEL_INFO()
{
chChanName[0] = '\0';
}
}CHANNEL_INFO, * pCHANNEL_INFO;
class MYOBJECT_DLLAPI MyObject
{
public:
MyObject();
~MyObject();
};
字符集什么的可能还要按需调整,生成后,
就有 MyFirstLib.dll 和 MyFirstLib.lib 生成,
还有这里在MyFirstLib的属性中,选择“生成事件”,
然后比如选择“生成后事件”,
在命令行里可以添加复制的命令xcopy,
将dll和lib文件在生成后自动复制到相应目录下,
免得我们手动复制了,
命令的话比如
xcopy /y $(OutDir)$(TargetName)$(TargetExt) $(OutDir)..\..\..\Bin\$(Configuration)_$(Platform)
//xcopy /y D:\HIK_DEV\MyProjects\HIKVideoLib\x64\Debug\HIKVideoLib.dll D:\HIK_DEV\MyProjects\HIKVideoLib\x64\Debug\..\..\..\Bin\Debug_x64
感谢主管指导与大佬们分享的博客!