1

C# のアプリケーションで使用する必要がある C++ で記述された DLL があります。Vista x86 では問題なく動作しますが、x64 ではロードに失敗します。そこで、DLL の x64 バージョンをビルドし、OS が x86 か x64 かを検出し、適切な DLL への適切な相互運用呼び出しを使用します。これは Vista x86 では問題なく動作しますが、Vista x64 では DLL をロードしようとすると「サイド バイ サイド」エラーが発生します。ロードに失敗する正確な理由と、これを修正するために何ができるでしょうか? (さらに情報が必要な場合はお知らせください。この問題のトラブルシューティングに関連する情報がわかりません。)

4

5 に答える 5

4

最初のアイデア: プロジェクトの C# 部分の「プラットフォーム ターゲット」設定を「x86」に設定して、Vista 64 マシンで 32 ビット互換モードで実行されるかどうかを確認していただけますか?

SxS エラーに関する詳細情報が役立ちます。インストールされていないランタイム ライブラリの特定の (32 ビット?) バージョンに関連している可能性があります。

于 2008-12-04T14:19:27.273 に答える
3

MadKeithV の回答に対する詳細情報:

Windows x64 では、プロセスは 32 ビットまたは 64 ビット プロセスとして開始される場合があります。64 ビット プロセスは 64 ビット DLL のみをロードでき、32 ビット プロセスは 32 ビット DLL のみをロードできます。

.Net アプリケーションのプラットフォーム ターゲット (たとえば、プロジェクト プロパティで指定) が「任意の CPU」に設定されている場合、中間コードはターゲット プラットフォームに応じて 32 ビットまたは 64 ビット コードにコンパイルされます。つまり、x64 システムでは 64 ビット コードは生成されます。

したがって、コードは 32 ビット dll をロードできなくなります。

コードがアンマネージ アセンブリを読み込む場合は、常にターゲット プラットフォームを明示的に指定する必要があります。

于 2008-12-04T14:48:53.750 に答える
2

他に何も機能しない場合は、Process Monitorを試してみてください。どのファイル (依存関係) が見つからなかったかを示します。これにより、先に進むことができます。

于 2008-12-04T14:55:16.797 に答える
2

x64 用の VC90 の redist をクライアント マシンにインストールする必要があります。マニフェストに関する限り、それを変更して processorArchitecture タグを削除できると思います。それか、「いずれか」と言わせてください。

于 2008-12-04T20:41:31.497 に答える
0

サイド バイ サイド エラーは、C++ dll マニフェスト ファイルの設定が埋め込まれていないか、マニフェストを埋め込まないことを選択して 32 ビット バージョンのマニフェストを使用していることが原因である可能性が高くなります。

簡単な解決策は、c# アプリケーションを x86 カップ用としてマークし、32 ビット dll で実行することです。

于 2008-12-04T14:52:49.610 に答える