4

VS2008 を使用してネイティブ C++ で ActiveX コントロール (OCX) を作成しました。

Microsoft ActiveX コントロール テスト コンテナー (TstCon32.exe) のスレッドと、コントロールを参照する独自のネイティブ cpp アプリケーションにアタッチすると、正しくデバッグできます。

MyCtrlNameLib.dllただし、およびでコントロールを参照する .NET winform アプリケーションのスレッドにアタッチしてデバッグすることはできませんAxMyCtrlNameLib.dll。ブレークポイントに次のメッセージが表示されます。

ブレークポイントは現在ヒットしません。このドキュメントのシンボルは読み込まれていません。メッセージ

.NET Winform アプリケーションによって参照される ActiveX コントロールをデバッグする方法はあるのだろうか。

問題は、.NET アプリケーションが MyCtrlName.ocx をロードしていないため、MyCtrlName.pdb が追加されていないことだと思います。代わりに InterOp.MyCtrlNameLib.dll と AxInterOp.MyCtrlNameLib.dll をロードします。

4

2 に答える 2

1

@LihO のおかげで、正しい方向性が示されました。ようやく機能しました。解決策は非常に簡単です。ActiveX コントロール プロジェクトのプロパティに移動するだけです。[ Debug branch] の下で、 [Debugger Type ] を[ Mixed ] に設定すると、すべてのブレークポイントにヒットできます。

于 2013-03-14T16:06:16.280 に答える
1

「.NET Winfrom アプリケーションによって参照される ActiveXControl をデバッグする方法はあるのだろうか」

いいえ、できません。

なんで?ActiveX はスタンドアロン コンポーネントであるため、C# アプリケーションはバイナリ形式で使用します。この .NET アプリケーションには、ActiveX の内部実装に関する情報はまったくありません。このコンポーネントが提供する機能を使用できるように、インターフェイスのみを認識しています。

Microsoft ActiveX コントロール テスト コンテナー (TstCon32.exe) のスレッドと、コントロールを参照する独自のネイティブ cpp アプリケーションにアタッチすると、正しくデバッグできます。

ActiveX のコードをデバッグする唯一の方法は、このコードを実際に実行するプロセスにアタッチすることです。

于 2013-03-14T15:03:15.093 に答える