[求助] 动态调用DLL ,DEBUG方式VC++怎么设置?

ouleipeng 2008-10-15 04:47:59
我用的是VC++ 6.0 ,工程里有一个EXE,一个DLL,这个EXE动太调用DLL.

一般我是把DLL复制到EXE下.请问怎么设置VC不用每次编译完要复制,

还有可不可以运行EXE时,DEBUG到DLL文件里.
...全文
909 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
dengniancai 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 ouleipeng 的回复:]
我的程序是用LoadLibrary 动态加载的.
9. 将 TestExe 设为活动工程, 在 TestExe.cpp 文件中加入断点, 按 F5 进入调试, 可以发现程序可以运行到断点处. ?
我的主题是在 TestDll.cpp 里设断点,不知可行吗?
[/Quote]

哦 在 TestDll.cpp 设断点, 也可以的.
zhourenyun 2008-10-20
  • 打赏
  • 举报
回复
其实上面的解释很对、绝对何以用断点。
我以前已经调试过好多次了。

两个文件输出到同一个文件夹
=============================
说的比较简单但是这个的确是方便调试dll的方法。
dengniancai 2008-10-19
  • 打赏
  • 举报
回复
为了统一管理源码和执行文件, 我一般是这么做的 :
1. 在指定的文件夹下, D:\Code 下建一个空白解决方案 (File -> New -> Workspaces -> Blank Workspace) 名字为 TestWorkSpace;
2. 关掉 VC 6.0, 在 D:\Code 文件夹下就可以看到 TestWorkSpace 的文件夹, 打开这个有一些文件, 除了 .dsw 有些用以外, 其他如 .ncb 和 .opt 结尾的文件都没有用, 可以删掉. 在 D:\Code\TestWorkSpace 下面建两个文件夹 src , bin (分别存放源码和执行文件), 将 TestWorkSpace.dsw 移动到 D:\Code\TestWorkSpace\src 中.
3. 打开 TestWorkSpace.dsw, 现在 WorkSpace 中还没有 Project, 右击 -> Add New Project to WorkSpace..., 添加Win32 Dynamic-Link Library 工程 TestDll, 添加 Win32 Console Application 工程 TestExe.
4. 菜单 Project -> Setting -> General (标签), Settings For 选择 Win32 Debug, 选择 TestDll, 在 Output Files 输入 ..\..\bin; 选择 TestExe; 在 Output Files 也输入 ..\..\bin. 再选择 Win32 Release 进行同样的操作. 这样就使 Debug , Release 产生的执行文件和动态链接库文件都输出到 D:\Code\TestWorkSpace\bin 中.
ouleipeng 2008-10-19
  • 打赏
  • 举报
回复
楼上,试了你说的方法. DLL的文件都产生在EXE的DEBUG目录下.
但在DLL设个断点还是以下提示.
one or more breakpoints cannot be set and have been disabled. Execution will stop at the beginning of the program.
dengniancai 2008-10-19
  • 打赏
  • 举报
回复
Project -> Setting -> General (标签) 设置 Output 在同一个目录下, 最好是用相对路径.

如 .\Debug 或者 Debug 表示当前目录的 Debug 文件夹下, ..\OtherProject\Debug 表示上一级目录的其他 Project 的 Debug 文件夹下,
..\..\OtherWorkSpace\Project1\Debug 表示上两级目录的其他 WorkSpace 的 其中一个 Project 的 Debug 文件夹下.

不过要保证 这个目录必须存在.
VsirSoft 2008-10-19
  • 打赏
  • 举报
回复
设置一下工程的输出路径就好了
ouleipeng 2008-10-19
  • 打赏
  • 举报
回复


是这个吗? 但我用的是动态加载!
ouleipeng 2008-10-19
  • 打赏
  • 举报
回复
我的程序是用LoadLibrary 动态加载的.
9. 将 TestExe 设为活动工程, 在 TestExe.cpp 文件中加入断点, 按 F5 进入调试, 可以发现程序可以运行到断点处. ?
我的主题是在 TestDll.cpp 里设断点,不知可行吗?
dengniancai 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ouleipeng 的回复:]
谢谢楼上的详解.
一般我是用MFC AppWizard(dll) 和MFC AppWizard(exe).
设置也是按照上面的步骤4.

另外我想问下MFC AppWizard(dll)和Win32 Dynamic-Link Library 有什么区别吗?
[/Quote]

 Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。

  非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用;MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环;MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。
dengniancai 2008-10-19
  • 打赏
  • 举报
回复
我接着用这个例子告诉你, 怎样实现动态链接库的具体调用:
5. 在 TestDll 工程下建两个文件, 分别为 TestDll.h 和 TestDll.cpp, 两个文件代码如下所示:

TestDll.h

#ifdef TESTDLL_API
#else
#define TESTDLL_API _declspec(dllimport)
#endif

TESTDLL_API int add(int a, int b);
TESTDLL_API int subtract(int a, int b);


TestDll.cpp

#define TESTDLL_API _declspec(dllexport)
#include "TestDll.h"

TESTDLL_API int add(int a, int b)
{
return a + b;
}

TESTDLL_API int subtract(int a, int b)
{
return a - b;
}


6. 在 TestExe 工程下建立一个文件 TestExe.cpp, 代码如下所示:

#include "..\TestDll\TestDll.h"
#include <iostream.h>

void main()
{
cout<<add(10, 10)<<'\n';
cout<<subtract(29, 15)<<'\n';
}


7. 接着将 TestDll 设为活动工程 (set as an active project), Build 成功, 可以在 D:\Code\TestWorkspace\bin 下看到 TestDll.dll 和 TestDll.lib 等文件.

8. TestExe 工程需要将 TestDll.lib 文件通过 Add Files into Project 进来, 加入的时候应该选所有文件类型.

9. 将 TestExe 设为活动工程, 在 TestExe.cpp 文件中加入断点, 按 F5 进入调试, 可以发现程序可以运行到断点处.
ouleipeng 2008-10-19
  • 打赏
  • 举报
回复
谢谢楼上的详解.
一般我是用MFC AppWizard(dll) 和MFC AppWizard(exe).
设置也是按照上面的步骤4.

另外我想问下MFC AppWizard(dll)和Win32 Dynamic-Link Library 有什么区别吗?
ouleipeng 2008-10-18
  • 打赏
  • 举报
回复
楼上,我试过你说的方法.
先出现 one or more breakpoints cannot be set and have been disabled. Execution will stop at the beginning of the program.
后出现 Find Symbols 对话框 Please enter the path for mfcs42d.pdb.
烧IC 2008-10-18
  • 打赏
  • 举报
回复
在静态库中使用 MFC(E) 开始创建的时候勾选上
Joephia 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 ouleipeng 的帖子:]
我用的是VC++ 6.0 ,工程里有一个EXE,一个DLL,这个EXE动太调用DLL.

一般我是把DLL复制到EXE下.请问怎么设置VC不用每次编译完要复制,

还有可不可以运行EXE时,DEBUG到DLL文件里.
[/Quote]

修改模块输出路径 DEBUG 为 ..\xxx\debug

要调试 DLL 可以把可执行文件和DLL 放一起, 在 DLL 工程中设置断点 ,F5 调试 ,

然后选择刚才那可执行文件 ,触发调用DLL, 然后就能调试DLL 了
ouleipeng 2008-10-15
  • 打赏
  • 举报
回复
那样的话,可以实现DEBUG吗
fox000002 2008-10-15
  • 打赏
  • 举报
回复
两个文件输出到同一个文件夹

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧