2009-06-03 30 views
9

64ビットアプリケーションで使用しようとすると、32ビットのコンパイル済みのDLLがロードされます。 したがって、dllを64ビットに変換したいと思います。アプリケーションのプラットフォームが「任意のCPU」または「x64」から「x86」に変更されたときに正常に動作します。しかし、私は64ビットの下でそれを使用したいので、ASPページからdllを呼び出す予定です。32ビットdllを64ビットdllに変換する

これで私を助けてください。

+0

これは再コンパイルできるDLLですか? – kbyrd

答えて

0

32ビットと64ビットの両方のプロセスで純粋なC#DLLをロードする場合、正しい選択はAnyCPUです。これは、DLLをCPUに依存せずにコンパイルし、どちらのタイプのプロセスにもロード可能です。

私はあなたが何を求めているのかは100%確信していません。それができない場合は、あなたの質問を明確にすることができますか?

10

Windows 64ビットプロセスに32ビットdllをロードすることはできません。これは回避できない制限です。これは、32ビットDLLが他の32ビットDLLにP/Invokeを実行した場合(または32ビット.Net DLLを使用する場合)、あなたは完全に不運になります(32ビットでウェブサイト全体を実行する必要があります)。

いつ動作するのか、動作しないのかは明確ではありません。説明は次のとおりです。

  1. x86-32bit - 64ビットプロセスにロードできません。
  2. x64 - 64bit - 32bitマシンでは実行できません。
  3. AnyCPU - デュアル - 両方の環境でロードして実行できます。 AnyCPUの面では

:64ビットマシン上

  1. 64ビットのプロセス - DLLは64ビットとしてロードされます。
  2. 32ビットマシン上の32ビットプロセス - DLLは32ビットとしてロードされます。
  3. 64ビットマシン上の32ビットプロセス - DLLは32ビットとしてロードされます。

ほとんどの場合、AnyCPUとして残しても大丈夫です。しかし、私が言ったように、ネイティブまたは.Netの32ビットDLLを使用している場合は、アプリケーション全体を32ビットにする必要があります(そして、これについては何もできません。

+0

Windowsだけでなく、すべてのOS! –

+0

サンク層と巧妙なコードを使用することは可能です。いくつかのコンパイラはサンクをサポートし、あなたのためにすべてのハードワークを行います。これまでOS/2でこれをやっています。すなわち、32ビットプロセスからの16ビットDLLと、16ビットプロセスからの32ビットDLLとをロードして使用する。しかし、32ビットマシンで64ビットコードをネイティブに実行することはできません。 – Matt

+0

ありがとうございました!私のアプリはWindows x64のインストールに失敗しました。サードパーティのDLLがx86としてコンパイルされたようです。私のアプリをx86に設定すると、それが修正されました。 – mbmcavoy

2

x86フラグは、通常理由によって設定されるため、変更することは悪い考えかもしれません。しかし、あなたが絶対に確信しているなら、ユーティリティ、corflags.exeがあります。私はC:¥Program Files¥Microsoft SDKs¥Windows¥v6.0A¥bin配下にあります。もちろん、.NETアセンブリでのみ役に立ちます。

関連する問題