x64プラットフォームで実行しているときにx86 DLLでメソッドを呼び出すと、 'AccessViolationException'が発生する '保護されたメモリを読み書きしようとしています' 7)。すべてがx86プラットフォームでうまくいきます。VS 2010/DotNet 4.0 x86ターゲットアプリケーションからx86 dllを呼び出す
私は同様の問題に関する多くの記事を読んだことがありますが、私のコードを動作させることができませんでした。
私は古いx86アプリケーションをWindows 7(x64)とServer 2008 R2(x64)でうまく動作させようとしています。このアプリは、VB6、VB.Net、C#、MicroFocus COBOL、C++の組み合わせです。 (当時は、他の言語を捨てることはできませんでした)。 DotNetコードはもともとDotNet 1.1のVisual Studio 2003で書かれていました。私はコードをVisual Studio 2010とDotNet 4.0に移植しました。すべてのプロジェクトの対象をx86に設定しました。私がun-managed 32ビットdllを呼び出すと、私は上記のエラーを受け取ります。
私たちのInstallShieldセットアップルーチンは、C:\ Windows \ System32の代わりにx86 DLLをC:\ Windows \ sysWOW64にインストールしています。この動作は正しいようです。 DLLは、COBOLのオブジェクトコードと実行時のコンポーネントで、CスタイルのDLLにリンクされています。私は問題がCOBOLやリンクプロセスと関係しているとは思えません。Code Projectのサンプルアプリケーションを、単純なC++ dllを呼び出すVB.Net WinFormsアプリケーションで移植しました。私はそこに同じエラーを取得します。私はまた、DLLを呼び出すC + +コマンドラインアプリを構築しようとしました。ライブラリのロードは成功します。 GetProcAddressは成功します。特定のメソッドの関数ポインタを呼び出すと失敗します。私たちのVB6アプリケーションは、Windows 7 x64で動作しているときにdllをうまく呼び出すことができます。また、UACを無効にして、マニフェストのrequestedExecutionLevelをhighestAvailableに設定してみました。私は管理者として実行しようとしました。
これはうまくいくはずですが、次に試すものはわかりません。何か案は?
OPでは、「...すべてのプロジェクトのターゲットをx86に設定してください」と表示されます。 –
私に戻ってくれてありがとう。はい、私はすでにそれを行っています - すべてのプロジェクトはx86をターゲットに設定されており、アクセス違反エラーがあります。その他の提案はありますか? – user886851