C++ -- VS2017实际项目调用外部DLL经历
Posted bug404
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ -- VS2017实际项目调用外部DLL经历相关的知识,希望对你有一定的参考价值。
项目背景:机械臂的SDK,厂家给了.h,.lib和.dll。同时SDK的体积不算大,隐式调用即可。隐式调用相比显示调用写代码更方便同时更加方便移植。
1.官方给了SDK的说明文档,但是为了开发还是要看一下DLL里面封装的函数和函数的定义。
参考上一篇博文:C++ -- 解析DLL
从这里大体可以看出函数和定义,但是名字很奇怪,因为C++有重载函数机制,编译器为了保证名称各不相同,会自己修改一下名称,为了防止编译器修改,可以在编写DLL的时候用 extern "C"来避免,具体搜相关资料。厂家给的DLL怎么写不在我们的控制范围之内了。
2.VS2017里面进行相关的配置完成DLL的隐式调用。
(1) 新建一个控制台应用程序。
在项目名称上右击,“在文件资源管理器中打开文件夹”,可以看到大概这样的目录。
(2)把外部DLL、Lib、h文件复制到项目目录下。
(3) 回到VS,在项目名称上右击,选择属性。
设置VC++目录选项。这个选项是针对.h文件的。
设置为 SDK的头文件目录。
(4) 设置库目录,这个是针对.lib文件的。.lib文件的作用在动态链接库里面是作为DLL的引用文件,通过.lib文件,编译器可以找到对应的.dll文件里面的函数。
设置为SDK的.lib文件的文件夹位置。
(5) 设置 链接器 选项,这个是针对DLL文件的,但是注意,我们不直接引用DLL文件,是通过Lib文件来间接找到DLL文件。
把需要用到的DLL文件的对应的Lib文件的名称添加到 附加依赖项,注意是Lib文件。
3.这时候在主程序中包含SDK的头文件,并编写相关的一些代码。
生成->生成解决方案。
注意:看一些资料可能很多在代码中使用了
#pragma comment(lib,"ASAGE_API.lib")
#pragma comment(lib,"Robot.CppBase.lib")
这个语句,这个语句的作用和我们在链接器->输入中附加依赖项添加lib文件的作用是一样的,所以在属性里面设置了前面那些后,在程序中就不用编写这句代码了。
以上是关于C++ -- VS2017实际项目调用外部DLL经历的主要内容,如果未能解决你的问题,请参考以下文章
VS2017下创建C++动态库导出符合并完成调用测试(DLL可供C#调用)
我在VS2017里面用C#在.net framework上编写了一个dll,我想编译,怎么解决?