最近项目需要生成dll,这里介绍我生成和调用dll的流程。环境是vs2017
一,dll的生成
-
C++代码是在普通环境下开发调试的(文件->新建->项目->空项目)一定要注意平台是x86还是x64!!
-
把正确的代码放到生成可以生成dll的环境中(文件->新建->项目->Visual C++的控制台应用)
其实这里我也采用过 文件->新建->项目->Visual C+±>Windows 桌面 -> 动态链接库(DLL) 生成解决方案的时候遇到了找不到头文件的问题,感觉比较麻烦,所以还是采用控制台应用修改为dll的方式 -
新建 添加头文件和源文件的代码
定义动态链接库的接口,接口的头文件和源代码文件需要以下操作
此处参考https://zhuanlan.zhihu.com/p/651022331
- 右键解决方案->属性->配置属性->常规->配置类型 选择动态库(.dll)
这里需要注意红框位置平台要选择正确和代码的运行平台要一致~
- 生成->重新生成解决方案
下面提示 ”成功:1个“…则代表dll已经成功生成了
检查debug文件夹下是否有.dll和.lib文件生成
二,调用dll
-
新建项目(文件->新建->项目->Visual C++的控制台应用)一定要注意平台是x86还是x64,和前面保持一致!!
-
将步骤一生成的.dll .lib和头文件放到新建项目的如图文件夹
-
添加一个源文件调用主函数,注意要include头文件
-
绑定头文件(头文件->添加->现有项)
-
添加.lib到资源文件
-
生成->重新生成解决方案
运行结果如下
-
点绿色三角执行
执行窗口如下
三,中间遇到的问题
生成dll解决方案的时候报错
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 "void __cdecl AddAnAdd(int,int (__cdecl*)(int,int))" (?AddAnAdd@@YAXHP6AHHH@Z@Z),该符号在函数 _main 中被引用 DLLTest D:\vs\DLLTest\DLLTest\test.obj 1
解决办法:
后来新创建了一个空项目,然后再创建cpp文件和h文件,再敲代码,然后操作:解决方案资源管理器->(右键点击)AlexDll->属性->配置属性->常规->配置类型:动态库(.dll),再重新生成解决方案就成功了。
最后验证dll的时候,生成解决方案再点击下面的绿色三角就可以正常运行了,而且在主函数加入了下面代码可以暂停窗口
system("pause");
报错
解决方法
报错
解决方法
注意release和debug模式下的opencv依赖库不同,参考(https://blog.csdn.net/weixin_42450976/article/details/125749045)
参考网址:https://blog.csdn.net/m0_37170593/article/details/76445972