如何从C++非 COM dll 调试C++ COM dll
How to debug a C++ COM dll from a C++ non-COM dll?
这是场景。我正在使用Visual Studio 2010。我有一个C++COM dll。此 dll 由另一个不是 COM 项目的 C++ dll 项目使用。第二个 dll 向客户端应用程序公开 API。依赖项是客户端>非COM dll->COM dll。我想从任何客户端应用程序调试 COM dll。
以下是我已经尝试过的事情。
- 创建了一个使用非 COM dll 的C++ win32 控制台应用程序。 将 COM dll
- 和非 COM dll 以及相应的 pdb 文件保存在 win32 应用程序的调试目录中。在选项->调试->符号中,我选择了调试目录的路径并选中了"仅指定的模块"选项以加载这些文件。
- 设置所有包含和库依赖项。
- 现在,我可以成功运行该应用程序。但是在调试时,我只能通过按 F11 导航到非 COM dll,并且从此 dll 到 COM dll 的相同 F11 导航不起作用。
- 当我使用两个非 COM dll 和一个客户端应用程序尝试此操作时,我可以导航到最里面的 dll。在这一点上,我意识到我应该更改相应的注册表项以指向位于客户端应用程序调试目录中的COM dll文件,但没有运气!
很抱歉,我无法共享代码或详细描述。
有什么解决办法吗?
可以在 COM dll 源代码中设置断点,然后将其附加到名为"dllhost.exe
"的进程。每当本机 dll 调用 COM dll 时,都会命中断点。
-
将 COM dll 项目设置为启动项目。右键单击该项目。导航到"属性"->"配置"属性"->"调试->命令"。输入客户端应用程序的完整路径。例如:C:\Users...\Debug\ClientApplication.exe。
-
通过命令 regsvr32 "pathToCOMDll" 以管理员身份运行 Windows 命令提示符注册 COM dll。 断点将被命中。例如:regsvr32 "C:\Users...\COMDll.dll",其中 COMDll.dll 是 COM dll。什么 dll 引用什么 dll 并不重要。
注意:避免直接编辑 windows 注册表并尝试使用 regsvr32 命令。
相关文章:
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- 如何将从控制台应用程序C++回调设置为C++ COM DLL
- 使用线程 C# 中的 VC++ 6.0 COM DLL
- 如何调试 COM DLL
- C++ 安全数组在从 c# COM dll 返回时具有无效数据
- 如何从客户端为COM服务器设置dll搜索路径?
- WinAPI - GetLastError 在通过 COM ATL DLL 调用时始终返回 0
- WScript.CreateObject 在调用 C++ COM dll 函数时返回空
- 可视化 使用 C++ API 注册 COM DLL 的所有接口
- 如何返回包含来自com dll的多个空字符的BSTR
- 无法追加到 COM Dll 中的字符串 奇怪的行为
- 如何从MFC DLL中获取与COM包裹的C#对象的接口
- 当InProcServer32键定义DLL的完整路径时,path环境变量中为什么需要COM DLL的路径
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 合并 c 可执行文件、托管 COM dll 和 .Net GUI
- ATL结构从dll上断开COM对象
- 通过COM从C 解决方案进行调试C#DLL
- 删除/编辑 ATL COM DLL 属性/方法
- C#封送以调用C++DLL.COM和线程问题
- 在非托管c++程序中实现一个c# DLL COM文件