2013-03-14 53 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

相關問題