2013-03-14 81 views
2

我用本机C++编写了一个ActiveX控件(OCX),使用VS2008。如何通过使用.NET应用程序的过程来调试ActiveX控件?

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

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

断点当前不会被命中。没有符号被载入这个文件。消息

我不知道是否有一种方法来调试我的ActiveX控件引用的.NET Winfrom应用程序。

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

回答

0

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

2

“我不知道是否有调试我ActiveXControl由.NET Winfrom应用程序引用的方式”

没有,这是不可能的。

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

我能正确调试它,当我连接到Microsoft ActiveX控件测试容器的螺纹(TstCon32.exe)和我自己的原生应用程序的cpp它引用控制

因为只有这样,如何调试ActiveX代码的方法是附加到实际执行此代码的进程。

+0

是的,我看到没有MyCtrlName.ocx在调试模块窗口中,只有AxInterOp.MyCtrlNameLib.dll和InterOp.MyCtrlName.dll被加载。 – SuperLucky 2013-03-14 15:28:39

+0

但是,使用explorerXp,MyWinApp.exe会加载MyCtrlName.ocx。所以我认为这个过程实际上执行它,但是当你使用托管代码附加一个进程时,VS只是忽略那些非托管代码的模块?嗯,我有一些实验要做。无论如何,谢谢你的帮助。 – SuperLucky 2013-03-14 15:40:14

相关问题