2017-11-03 54 views
-1

WinFormアプリケーションでdllをインポートする必要があります。64ビットWindowsで32ビットdllをインポート

[DllImport("ole32.dll")] 
static extern int GetRunningObjectTable(uint reserved,out IRunningObjectTable pprot); 
[DllImport("ole32.dll")] 
static extern int CreateBindCtx(uint reserved,out IBindCtx pctx); 

これは32ビットOSで動作します。

64ビットOSがありますが、32ビットの.dllがインストールされています。 私は64ビットの.dllを持っていません。 ole64.dllはありません。

64ビットOSで32ビットのDLLをロードする方法がある場合は、

+4

そのDLLの64ビット版の名前はole32.dllです。これらのOS dllは、別々のディレクトリに保存されます。 32ビットフレーバーはc:\ windows \ syswow64にあり、64ビットフレーバーはc:\ windows \ system32にあります。タイプミスではありません。 [ファイルシステムリダイレクタ](https://msdn.microsoft.com/en-us/library/windows/desktop/aa384187(v = vs.85).aspx)は、実行時に正しいものが見つかるようにします。だから唯一の問題はあなたに問題がないということです。 –

答えて

2

64ビットコードを32ビットプロセス内にロードすることはできません。その逆もありません。

プロセス内で32ビットコードと相互運用する必要がある場合は、32ビットも実行する必要があります。新しいVSバージョンの.NETプロジェクトのデフォルト設定は、プログラムを32ビットOSで32ビットモードで実行し、64ビットOSで64ビットモードで実行するためのものです。

[プロジェクト]オプション、[ビルド]、[プラットフォーム]のターゲットで変更できます。 "任意のCPU"を "x86"に変更してください: enter image description here

実際、ole32.dllでの問題は本当ですか? 64ビットOSを使用している場合は、%windir%\ System32フォルダにそのDLLの64ビットコピーを置く必要があります。この場合、32ビットバージョンは%windir%\ SysWOW64フォルダにあります。