3

C / C ++で記述されたアンマネージ32ビットライブラリを使用するC#(.NET 3.5、VS2005 Professional)アプリケーションを使用しています。私が使用するAPIは次のようなものです。

void * Initialize(int x);

voic GetData(void *);

これは、Windows XP 32ビットで実行すると機能しますが、WindowsXP64ビットでは例外がスローされます。

未処理の例外:System.Reflection.TargetInvocationException:呼び出しのターゲットによって例外がスローされました。---> System.BadImageFormatException:不正な形式のプログラムを読み込もうとしました。(HRESULTからの例外:0x8007000B)Aktuelizator.CommonLibrary.InitializeRingBuffer(Int32 dim)at Aktuelizator.AktuelizatorWService.AktuelizatorWS..ctor()

これらのアンマネージDLLは、32ビットから呼び出されたときに64ビットXPで動作し、C /C++で記述されたアプリケーションをアンマネージします。

誰かが何か考えを持っていますか?

4

3 に答える 3

2

ビルド構成プラットフォームは「任意のCPU」に設定されています。つまり、64ビットOSでは64ビットとして実行され、dllをロードできません。代わりにx86に設定すると、OSに関係なく32ビットとして実行され、dllが正常に読み込まれます。

于 2009-04-16T10:41:43.497 に答える
1

DLLは32ビットにしかコンパイルされていないようですが、32ビットと64ビットの両方のプロセスから呼び出そうとしています。もちろん、前者は機能します。ただし、後者はそうではありません。32ビットDLLは、32ビットプロセスでのみ使用できます。DLLを64ビットターゲットにコンパイルして、C#アプリにそれを使用させてみてください。

于 2009-04-16T10:17:18.593 に答える
0

Int32として定義されているすべてのパラメーターを確認します。これは、実際にはIntPtrである必要があります。

于 2009-04-16T10:28:15.213 に答える