私はC#プロジェクトから参照しているManaged C++ dllを持っています。 C#プロジェクトはAnyCPUとしてコンパイルされます。 32ビット版と64ビット版のManaged C++ dllをコンパイルし、実行中のC#プロジェクトに実行中のアーキテクチャに応じて正しいものをロードするように指示する方法はありますか?マネージC++とAnyCPU
6
A
答えて
3
This articleでは、複雑な方法でこれを行う方法が説明されており、いくつかのアプリケーションに適用されるもっと簡単な方法について説明しているStefanのコメントを参照してください。
1
C++ dll(P/Invoke対.netアセンブリ参照)はどのように参照するのですか?インストール時に.dllの2つのバージョンを入れ替えることができます。
1
AnyCPU dllをC++ dllで再生するというトリックは、実行時にアセンブリがC++ dllをロードしてからAppDomain AssemblyResolveイベントに登録できないことを確認します。アセンブリがdllをロードしようとすると失敗すると、コードはロードする必要のあるdllを判断する機会があります。イベントへの登録
は次のようになります。私はAnyCPUのDLLからC++の機能にアクセスする方法を示す簡単なプロジェクトを作成している
System.Reflection.Assembly Resolver(object sender, System.ResolveEventArgs args)
{
string assembly_dll = new AssemblyName(args.Name).Name + ".dll";
string assembly_directory = "Parent directory of the C++ dlls";
Assembly assembly = null;
if(Environment.Is64BitProcess)
{
assembly = Assembly.LoadFrom(assembly_directory + @"\x64\" + assembly_dll);
}
else
{
assembly = Assembly.LoadFrom(assembly_directory + @"\x86\" + assembly_dll);
}
return assembly;
}
:
System.AppDomain.CurrentDomain.AssemblyResolve += Resolver;
イベントハンドラは次のようになります。
関連する問題
- 1. C#AnyCPUとRead/WriteProcessMemory
- 2. ネイティブC /マネージC++デバッグ
- 3. マネージC++リファレンスクラス
- 4. Win32のC++ dllとマネージC++ dllのマージ
- 5. マネージC++の理解
- 6. ネイティブC++からマネージC++へのC#
- 7. マネージC++クラスを使用してネイティブcppクラスをラップしようとすると、マネージC++
- 8. C++/CLIでマネージC#を公開する
- 9. アンマネージドC++とマネージC++の間のポインタの相違点
- 10. VB.NET ANYCPU ReadProcessMemory
- 11. アクセス違反AnyCPU
- 12. Assembly.Load x86/x64/AnyCPU
- 13. コンパイル時にC#.NetにアクセスできないマネージC++ネームスペース
- 14. バイト配列をマネージC++からc#にマーシャリングするには
- 15. タイプの配列へのポインターをマーシャリングする(マネージC# - >アンマネージC++)
- 16. C++/CLIからマネージC#にnullを送信
- 17. マネージC++アセンブリはオブジェクトをC#に返すことはできますか?
- 18. EWSマネージAPI 1.1 - プルサブスクリプションメモリリーク
- 19. マネージC++を使用したMMXの使用
- 20. 特定の.NETバージョン(VS2008)に対してマネージC++アセンブリをコンパイル
- 21. vs2010(msbuild4)を使用して.net 3.5でマネージC++プロジェクトをビルド
- 22. VS 2010でNUnitを使用したネイティブ/マネージC++のデバッグ
- 23. マネージC++でインターフェイスを実装する方法は?ここ
- 24. マネージC++リファレンスクラスでnamespace Systemを使用する方法
- 25. はIllegalArgumentException:未マネージ型スプリングブーツ
- 26. マネージ型/バックリファレンス「defaultReference」を処理できません:マネージ型と互換性のないバックリファレンス型(java.util.List)
- 27. AnyCpuのWebサイトを構築する
- 28. .NET AnyCPUプロジェクトは、プラットフォーム固有のライブラリに
- 29. Asp.Net AnyCPUまたはX64コンパイルをビルド
- 30. AnyCPUアプリケーションを64ビットOS上で32ビットとして実行
私はこのコメントに投票していますか? –
私も。私は生産でこれを行うかどうかはわかりませんが、これは少なくとも実行可能なアイデアです。不当を元に戻すために0にアップしました –
ありがとうIvan!私はあなたのサポートに感謝します:) –