私はC#.Netで書かれたアプリケーションを持っています(それが重要な場合はFramework 2.0)。フォームを表示する 1 つのメソッドで COM クラスを公開する VB6 exe を呼び出します。
VB フォームを閉じると、システム エラー (Windows メッセージ) が表示されます: メモリの場所を読み取れませんでした。次に、Windows は、アプリケーションを閉じるかデバッグするかを尋ねてきます。テスト マシンにはデバッガーがインストールされていないため、何を選択してもかまいません。デバッグを選択すると、終了する必要があるというメッセージが表示されます。
このエラーは、次の 2 つの条件でのみ発生します (両方とも該当する必要があります)。
- これを Windows 2000 で実行した場合。
- また、これは、レポートを生成するために別の COM DLL (Crystal レポート) を呼び出す [レポートの表示] ボタンを最初にクリックした場合にのみ発生します。
基本的には、次のような流れです。
C#.Net アプリケーション |-- MDI フォーム | | フォームのボタンをクリックすると、VB6 メソッドが呼び出されます。 +-- フォームを表示します。setParent(VBForm.Handle, DotNetForm.Handle) が呼び出されます | | とフォームが表示されます。呼び出されたメソッドが戻ります (戻り値はありません) | | | | | | +-- [レポートの表示] をクリックすると、Crystal Reports を使用してレポートが生成され、ユーザーに表示されます。 | | | | | | \-- 終了ボタンをクリックすると、フォームが閉じられます -ここでエラーが発生します | | \-- .Net フォームは、その内部フォームが閉じられた後もずっと生き続けます
このようなエラーの原因を知っている人はいますか? VB にはOn Error Goto
Main メソッド全体を囲む行があり、VB のエラーをキャッチする必要がありますが、そうではありません。ただし、このエラーは VB で生成された EXE ファイルから発生します。