私は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. ネイティブC++からマネージC++へのC#
- 5. マネージC++クラスを使用してネイティブcppクラスをラップしようとすると、マネージC++
- 6. アンマネージドC++とマネージC++の間のポインタの相違点
- 7. VB.NET ANYCPU ReadProcessMemory
- 8. アクセス違反AnyCPU
- 9. マネージC++アセンブリはオブジェクトをC#に返すことはできますか?
- 10. コンパイル時にC#.NetにアクセスできないマネージC++ネームスペース
- 11. バイト配列をマネージC++からc#にマーシャリングするには
- 12. タイプの配列へのポインターをマーシャリングする(マネージC# - >アンマネージC++)
- 13. EWSマネージAPI 1.1 - プルサブスクリプションメモリリーク
- 14. vs2010(msbuild4)を使用して.net 3.5でマネージC++プロジェクトをビルド
- 15. VS 2010でNUnitを使用したネイティブ/マネージC++のデバッグ
- 16. マネージC++を使用したMMXの使用
- 17. 特定の.NETバージョン(VS2008)に対してマネージC++アセンブリをコンパイル
- 18. マネージC++でインターフェイスを実装する方法は?ここ
- 19. AnyCpuのWebサイトを構築する
- 20. Asp.Net AnyCPUまたはX64コンパイルをビルド
- 21. .NET AnyCPUプロジェクトは、プラットフォーム固有のライブラリに
- 22. AnyCPUアプリケーションを64ビットOS上で32ビットとして実行
- 23. Assembly.Invoke()がx86およびAnyCPUと競合します
- 24. C#からの呼び出しのためのアンマネージドC++コードのマネージC++への翻訳
- 25. MFCダイアログで使用されるマネージC#ユーザコントロールの未処理例外
- 26. C#で固定バイト/ char [100]をマネージchar []に変換する方法は?
- 27. snkファイルを使用するとマネージC++エラー::「署名に必要な秘密鍵がありません」
- 28. C#AnyCPUプロジェクトにプラットフォーム固有のdllが含まれている可能性があります
- 29. マネージDirectX:テクスチャとテキストを含むスプライトの深度(Zオーダー)を指定する
- 30. Excelサービス用のマネージUDFのビルトインExcel関数
私はこのコメントに投票していますか? –
私も。私は生産でこれを行うかどうかはわかりませんが、これは少なくとも実行可能なアイデアです。不当を元に戻すために0にアップしました –
ありがとうIvan!私はあなたのサポートに感謝します:) –