如何从C ++非COM DLL调试C ++ COM DLL?

时间:2014-12-24 09:53:09

标签: c++ visual-studio-2010 dll com

以下是该方案。我正在使用Visual Studio 2010.我有一个C ++ COM DLL。这个DLL由另一个不是COM项目的C ++ DLL项目使用。第二个dll将API暴露给客户端应用程序。依赖性是Client-> Non-COM dll-> COM dll。我想从任何客户端应用程序调试COM DLL。

以下是我已经尝试过的事情。

  1. 创建了一个使用非COM dll的C ++ win32控制台应用程序。
  2. 将COM dll和非COM dll以及相应的pdb文件保存在win32应用程序的debug目录中。在Options-> Debugging-> Symbols中,我选择了调试目录的路径并选中了#34;仅指定了模块"加载这些文件的选项。
  3. 设置所有包含和库依赖项。
  4. 现在,我可以成功运行该应用程序。但是在调试时,我只能通过按F11导航到非COM dll,同样的F11导航无法从此dll工作到COM dll。
  5. 当我尝试使用两个非COM dll和客户端应用程序时,我可以导航到最里面的dll。此时,我意识到我应该将相应的注册表项更改为指向位于客户端应用程序的调试目录中的COM dll文件,但没有运气!
  6. 很抱歉,我无法分享代码或详细描述。

    任何解决方案?

2 个答案:

答案 0 :(得分:1)

您可以在COM dll源代码中设置断点,然后将其附加到名为' dllhost.exe'的流程中。每当本机dll调用COM dll时,断点就会命中。

答案 1 :(得分:0)

  1. 将COM dll项目设置为启动项目。右键单击该项目。导航到Properties-> Configuration Properties-> Debugging-> Command。输入客户端应用程序的完整路径。 例如:C:\ Users ... \ Debug \ ClientApplication.exe。

  2. 通过命令 regsvr32" pathToCOMDll" 以管理员身份运行Windows命令提示符注册COM dll。断点将被击中。 例如:regsvr32" C:\ Users ... \ COMDll.dll"其中COMDll.dll是COM dll。什么dll引用什么dll应该没关系。

  3. 注意:避免直接编辑Windows注册表并尝试使用regsvr32命令。