在VS2008 C++中如何调试 DLL工程

在VS2008 C++中如何调试 DLL工程,第1张

对DLL的调试是一个热门话题,上网搜索了一下,发现很多相关的信息,但几乎全部是没有进行验证的摘抄,很鄙视这种行为。所以我在浏览的一些国外的网站后,结合自己的经验写下我在vs

2008编译平台上调试DLL的方法。按照我描述的方法如果你还不能在DLL里打断点进行调试的话,那就找块板砖,拍我,或者拍你自己!

C++

项目中指定调用应用程序

在“解决方案资源管理器”中选择

DLL

项目。

从“视图”菜单中,选择“属性页”。

在“Project

属性页”窗口的“配置”下拉列表中,选择“调试”。

打开“配置属性”文件夹并选择“调试”类别。

在“要启动的调试器”列表框中,选择“本地

Windows

调试器”或“远程

Windows

调试器”。

关键是第六条和第七条,这才是这个方法的精髓部分。

6.

在“命令”或“远程命令”框中,单击下拉箭头,并从列表中选择“浏览”以浏览指定应用程序,或键入应用程序的路径和名称。

方法:在“命令”中输入rundll32.exe。

7.

在“命令参数”框中键入所有需要的程序参数。

方法:在“命令参数”框输入

$(TargetFileName)

XXX,其中XXX表示你DLL导出函数的函数名。

在“工作目录”框中输入

$(OutDir)

其实“命令参数”和“工作目录”两个框是可以通过点击来进行设置的,由于设置时描述麻烦,就直接输入好了,有兴趣的朋友可以试试怎么设置,设置过程并麻烦的!

好的,设定部分结束了,这是你可以在代码里设定断点,按F5,就可以运行了,这时候会d出一个对话框,说rundll32.exe不能找到,不用理他,点击“是”按钮,继续运行!看看是不是到你的断点处停了下来?

1)默认情况下,自动生成lib文件。

2)如果你知道所有导出函数的返回值类型,参数和函数名。可以不用.h文件。不过这样只能用代码动态加载DLL,无法在程序初始化时自动加载。

3)请看示例。

HINSTANCE hInstDLL = LoadLibrary(_T("a.dll"))

if(hInstDLL != NULL)

{

typedef VOID (*pFn)(VOID) // 这里定义函数指针,要根据你的实际情况

pFn pFunc = (pFn)GetProcAddress(hInstDll, "要加载的函数名")

if(pFunc != NULL)

pFunc()// 调用DLL中的函数

else

AfxMessageBox(_T("函数加载失败"))

}

else

AfxMessageBox(_T("DLL加载失败"))

调用dll,分两种方法,具体自己去看dll的调用。

vs2008中,静态方法,把dll头文件、lib放入项目,项目中添加该头文件,项目属性设置中、编译引用库中添加该lib的路径,而dll与exe放一起。

动态方法,把dll与exe放一起。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11863059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存