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) 新建一个控制台应用程序。

在项目名称上右击,“在文件资源管理器中打开文件夹”,可以看到大概这样的目录。

C++

(2)把外部DLL、Lib、h文件复制到项目目录下。 

C++

C++

  

C++

(3)  回到VS,在项目名称上右击,选择属性。

设置VC++目录选项。这个选项是针对.h文件的。

C++

设置为 SDK的头文件目录。 

C++

 

(4) 设置库目录,这个是针对.lib文件的。.lib文件的作用在动态链接库里面是作为DLL的引用文件,通过.lib文件,编译器可以找到对应的.dll文件里面的函数。

C++

设置为SDK的.lib文件的文件夹位置。 

C++

(5) 设置  链接器 选项,这个是针对DLL文件的,但是注意,我们不直接引用DLL文件,是通过Lib文件来间接找到DLL文件。

C++

把需要用到的DLL文件的对应的Lib文件的名称添加到 附加依赖项,注意是Lib文件。

 

C++

C++

 

3.这时候在主程序中包含SDK的头文件,并编写相关的一些代码。

C++

 生成->生成解决方案。 

C++

注意:看一些资料可能很多在代码中使用了 

#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,我想编译,怎么解决?

删除 MFC DLL 项目的外部依赖项

在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

从 C++ 调用 DLL 中的函数

Python调用DLL动态链接库——ctypes使用