如何使用使用它的.NET应用程序进程调试ActiveX控件?

时间:2013-03-14 14:58:41

标签: c# visual-c++ activex visual-studio-debugging tstcon32

我使用VS2008在本机C ++中编写了一个ActiveX控件(OCX)。

当我附加到Microsoft ActiveX控件测试容器(TstCon32.exe)和我自己的引用该控件的本机cpp应用程序的线程时,我可以正确调试它。

但是,我无法通过将其附加到引用MyCtrlNameLib.dllAxMyCtrlNameLib.dll控件的.NET winform应用程序的线程来调试它。它在我的断点上显示以下消息:

  

断点当前不会被击中。没有为此文档加载任何符号。消息

我想知道是否有办法调试.NET Winform应用程序引用的ActiveX控件。

我认为问题是我的.NET应用程序没有加载MyCtrlName.ocx,因此没有添加MyCtrlName.pdb。它会加载InterOp.MyCtrlNameLib.dll和AxInterOp.MyCtrlNameLib.dll。

2 个答案:

答案 0 :(得分:1)

  

“我想知道是否有办法调试.NET Winfrom应用程序引用的ActiveXControl”

,这是不可能的。

为什么呢?因为ActiveX是一个独立的组件,所以C#应用程序以二进制形式使用它。这个.NET应用程序绝对没有关于ActiveX内部实现的信息,它只知道它的接口,以便可以使用该组件提供的功能。

  

当我附加到Microsoft ActiveX控件测试容器(TstCon32.exe)和我自己的引用控件的本机cpp应用程序

的线程时,我可以正确调试它

因为调试ActiveX代码的唯一方法是附加到实际执行此代码的进程。

答案 1 :(得分:1)

非常感谢@LihO指出了正确的方向,我终于明白了。 解决方案非常简单: 只需转到我的activeX控件项目的属性。 在调试分支下,将“调试器类型”设置为“混合”,并且可以命中所有断点。