1

バックグラウンド:

すぐに書き直されることのない大きなC++MFCアプリ。数年前、機能を追加する必要があり、C#と.NETを使用すると簡単に構築できると判断したため、C++アプリを使用して.NET関数を呼び出す方法が必要でした。当時、MFCアプリにはVC6.0を使用しており、VS.NET2003と.NET1.1を使用して.NET機能を構築していました。VS.NET 2003では、MFCアプリが使用できるエクスポートされた関数を使用して通常のwin32 dll(MFCなし)を構築しました。dll関数は.NETアセンブリを参照し、すべてうまく機能しました。現在、MFCアプリは引き続きMFCアプリですが、VS9でコンパイルされており、2003年にコンパイルされた古いdllでも正常に動作します。ただし、現在、新しいDLL(新機能)の作成に直面しており、VS9および.NET3.5でビルドしています。

問題:

/clrオプションを使用して新しいDLLを作成しました。エクスポートされたdll関数から呼び出そうとしている.NETアセンブリにオプションフォームがあります。

次のような未処理の例外メッセージが表示されます。

IP2000.exeの0x04359108で未処理の例外:0xC0000005:アクセス違反の読み取り場所0x00000000

気に入らないコードは次のようになります。

FooTools::frmConfiguration ^ frmConfig = gcnew FooTools::frmConfiguration();
frmConfig -> ShowDialog();

構文が変更されました。*以前はandnewの代わりに^andを使用してgcnewいましたが、古い構文はコンパイルされません(それが問題であるかどうかはわかりません)。

エクスポートされた関数がストレートwin32::MessageBoxを配置することによって呼び出され、呼び出されることをテストしました。また、エクスポートされた関数からいくつかの異なるマネージコードを呼び出してみました。System::Windows::Forms::MessageBox->Show...、そしてそれもうまくいきました。このフォームを実行したくないだけです。

VS 2003とVS9の間で何かが変わったに違いないので、私は少し悲しみを感じていますが、それが何であるかはわかりません。このフォームは、テストWindows.Formsアプリから呼び出された場合に正常に機能します。

4

0 に答える 0