64ビットアプリケーションで使用しようとすると、32ビットのコンパイル済みのDLLがロードされます。 したがって、dllを64ビットに変換したいと思います。アプリケーションのプラットフォームが「任意のCPU」または「x64」から「x86」に変更されたときに正常に動作します。しかし、私は64ビットの下でそれを使用したいので、ASPページからdllを呼び出す予定です。32ビットdllを64ビットdllに変換する
これで私を助けてください。
64ビットアプリケーションで使用しようとすると、32ビットのコンパイル済みのDLLがロードされます。 したがって、dllを64ビットに変換したいと思います。アプリケーションのプラットフォームが「任意のCPU」または「x64」から「x86」に変更されたときに正常に動作します。しかし、私は64ビットの下でそれを使用したいので、ASPページからdllを呼び出す予定です。32ビットdllを64ビットdllに変換する
これで私を助けてください。
32ビットと64ビットの両方のプロセスで純粋なC#DLLをロードする場合、正しい選択はAnyCPUです。これは、DLLをCPUに依存せずにコンパイルし、どちらのタイプのプロセスにもロード可能です。
私はあなたが何を求めているのかは100%確信していません。それができない場合は、あなたの質問を明確にすることができますか?
Windows 64ビットプロセスに32ビットdllをロードすることはできません。これは回避できない制限です。これは、32ビットDLLが他の32ビットDLLにP/Invokeを実行した場合(または32ビット.Net DLLを使用する場合)、あなたは完全に不運になります(32ビットでウェブサイト全体を実行する必要があります)。
いつ動作するのか、動作しないのかは明確ではありません。説明は次のとおりです。
:64ビットマシン上
ほとんどの場合、AnyCPUとして残しても大丈夫です。しかし、私が言ったように、ネイティブまたは.Netの32ビットDLLを使用している場合は、アプリケーション全体を32ビットにする必要があります(そして、これについては何もできません。
Windowsだけでなく、すべてのOS! –
サンク層と巧妙なコードを使用することは可能です。いくつかのコンパイラはサンクをサポートし、あなたのためにすべてのハードワークを行います。これまでOS/2でこれをやっています。すなわち、32ビットプロセスからの16ビットDLLと、16ビットプロセスからの32ビットDLLとをロードして使用する。しかし、32ビットマシンで64ビットコードをネイティブに実行することはできません。 – Matt
ありがとうございました!私のアプリはWindows x64のインストールに失敗しました。サードパーティのDLLがx86としてコンパイルされたようです。私のアプリをx86に設定すると、それが修正されました。 – mbmcavoy
x86フラグは、通常理由によって設定されるため、変更することは悪い考えかもしれません。しかし、あなたが絶対に確信しているなら、ユーティリティ、corflags.exeがあります。私はC:¥Program Files¥Microsoft SDKs¥Windows¥v6.0A¥bin配下にあります。もちろん、.NETアセンブリでのみ役に立ちます。
これは再コンパイルできるDLLですか? – kbyrd