52

32 ビットから 64 ビットに移行しようとしているアプリケーションがあります。これは、x64 フラグを使用してコンパイルされた .NET です。ただし、32 ビット用にコンパイルされた FORTRAN 90 で記述された多数の DLL があります。FORTRAN DLL の関数は非常に単純です。データを入力し、データを引き出します。どんな状態でもない。また、そこに多くの時間を費やすことはなく、合計でおそらく 3% ですが、それが実行する計算ロジックは非常に貴重です。

どうにかして 64 ビット コードから 32 ビット DLL を呼び出すことはできますか? MSDN は、できないと示唆しています。簡単なハッキングを行い、これを確認しました。すべてが無効なエントリ ポイント例外をスローします。これまでに見つけた唯一の解決策は、すべての 32 ビット DLL 関数に対して COM+ ラッパーを作成し、64 ビット プロセスから COM を呼び出すことです。これはかなりの頭痛の種のようです。プロセスを WoW エミュレーションで実行することもできますが、メモリの上限は増加せず、約 1.6 GB に制限されます。

64 ビット CLR プロセスから 32 ビット DLL を呼び出す他の方法はありますか?

4

3 に答える 3

37

32 ビット dll を別の 32 ビット プロセスにロードし、プロセス間通信を介して 64 ビット プロセスと通信させる必要があります。それ以外の場合、32ビットのdllを64ビットのプロセスにロードできる方法はないと思います。

ここにかなり良い記事があります:

64 ビット コードから 32 ビット DLL へのアクセス

于 2008-09-24T17:21:19.613 に答える
1

実行可能プロセスを 32 ビット プロセス (任意の CPU または x64 に対して) として記述し、WoW32 for Vista でロードされるようにする必要があります。これにより、それらが 32 ビット エミュレーション モードでロードされ、エントリ ポイントの問題がなくなります。ライブラリは AnyCPU モードのままにしておくことができますが、実行可能ファイルは x86 としてコンパイルする必要があります。

于 2008-09-24T17:24:42.617 に答える
0

既存の dll を再コンパイルしたくない場合、ジョンの答えは正しいです。ただし、それはあなたにとってもオプションかもしれません。

私たちのチームは現在、メモリ上限を増やすために x86 FORTRAN コードを x64 に移行しています。

于 2012-01-06T02:50:05.303 に答える