VS2017生成DLL并进行引用调试
参考资料:http://blog.sciencenet.cn/blog-858128-992020.html
Contents
生成DLL
首先使用VS新建一个WIN32应用程序,在应用程序向导里选择DLL,附加选项选择空项目。如下图:
完成后在项目中添加头文件dll_test.h,里面定义一个宏:
#define EXPORT __declspec(dllexport) /* for Windows DLL */
放在函数声明的前面,用于表示该函数可被导出,进而被加载了该DLL的程序使用。使用方法:
EXPORT int add(int x, int y);
完整的dll_test.h如下图:
相应的在源文件中添加dll_test.cpp,用于实现头文件中定义的函数,这和普通的cpp没有什么区别,代码如下:
最后点击生成,在解决方案文件夹下Debug中会生成对应的.dll和导入库.lib,记得是在解决方案方案下的Debug,而不是项目文件夹下的Debug中。至此,一个DLL和它的lib就全部生成完了。
普通调用DLL
其他工程调用DLL需要注意三点:
(1)需要包含这个DLL的头文件,在上文中就是包含dll_test.h
这里需要设置项目属性中VC目录中的包含目录,或者C/C++中附加包含目录。其实就是要在include 文件的搜索路径中设置dll_test.h的路径。
设置下图中①或②中一项即可,设置为dll_test.h的路径
(2)添加DLL的导入库.lib
这里导入.lib文件作为DLL的链接入口,需要在VC++的库目录中添加.lib的路径,另外在链接器的附加依赖项中输入.lib的名称,当然也可以在代码 添加#pragma comment(lib,“rtklibDLL.lib”) 来替代链接器中输入附加依赖项的输入。
(3)将DLL与工程的exe放在同一文件夹下
另外需要注意的是默认的工程依赖VS环境,如果在没有VS环境机器上不能直接运行。解决办法是工程右键-> 属性-> C/C++ ->代码生成->运行库,改为/MT(Release)或者/MTd(Debug)。
引用调试DLL
- 普通的调用DLL,在进行调试时是无法进入DLL函数内部的。但是我们可以将DLL与调用该DLL的工程建立在相同的解决方案下,并用这个工程引用DLL,同时设置引用属性中使用库依赖项输入为True,进而可以在调试工程时,进入DLL中的函数。具体如下图。