dll常见问题

来源:互联网 发布:联通大数据公司 编辑:程序博客网 时间:2024/06/06 10:40

几个月前还对DLL十分熟悉,短短几个月时间基本上就忘光了,甚至连dll导入导出步奏都不知道,看来的确得多写博客啊!

现在对dll以问答形式做一个简单的回顾。

问题1:vs2012环境,dll连接时报错

error LNK1201: error writing to program database 'D:\project\dll\OpenNat_DLL\Debug\OpenNat_DLL.pdb'; check for insufficient disk space, invalid path, or insufficient privilegeD:\project\dll\OpenNat_DLL\OpenNat_DLL\LINK

百度后知道.pdb 文件是用来存放调试信息的,找不到该文件则应该跟工程的Debug info 设置有关。

分析之后,发现原来是自己把整个工程所在的目录作了移动,放到了另一个文件夹下面。

解决方法,移回原来的目录即可。(所以,大家千万不要有事没事就移动工程)还有另一个解决方案是设置属性,C/C++属性页,Category:选择General,在Debug Info:选项的下拉列表中选择Program Database 或 Line Numbers Only。


用类将函数和数据封装到Dll操作便捷,使用简单

问题2,:dll导入导出基本步奏

  1. Dll工程编译完成后,将.lib和.dll文件拷贝到测试和使用dll的工程的适当目录下(一般是debug或release目录),然后将Dll工程中的导出类的头文件(以下简称头文件)拷贝到测试和使用dll的工程的适当目录下(在我的程序中是拷贝到此工程文件所在目录),然后把这个拷贝过来的头文件通过下面2和3进行修改。
  2. 在Dll工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllexport) 表示导出,而在测试和使用dll的工程中的头文件使用的是 #define DLLCLASS_API __declspec(dllimport) 表示导入
  3. 不论Dll工程的头文件如何实现(比如说包括内联函数等等),在测试和使用dll的工程中的头文件中全部都是声明而没有定义(即将类成员函数的实现部分去掉)
  4. 在测试和使用dll的工程的那个文件中包含对dll库的引入:一、在stdafx.h中include头文件。二、在头文件中加入一句#pragma comment(lib,"DLL.lib")

问题3:vs中调试dll

亲试有效,留下来记住。如下是步骤:
1、在“Solution Explorer”中找到要调试的dll项目,点击右键,选择Set as StartUp Project,将dll设置为调试启动项目;然后选择dll项目,点击右键,选择Properties,打开属性页设置页面;
2、在Properties 页面的中,选择Configuration Properties下拉菜单,然后选择Debugging;
3、在Debugging的页面中,在第一行Debugger to launch的下拉菜单中,如果是本地调试选择Local Windows Debugger,远程调试选择Remote Windows Debugger;
4、在Debugging的页面中,Command中选择下拉菜单,找到引用该dll的应用程序(一般到debug里找.exe)

0 0