-1

私はsdkを持っています。これは x86 用の C++ で記述されており、x64 アプリケーションでこの dll を使用する必要があります。x86 アプリでこの dll を使用しましたが、すべて問題ありませんでした。ただし、Windows の x86 アプリは 1.4 Gb しか使用できません。私のアプリには小さすぎます。どうすればこれを増やすことができますか?

4

1 に答える 1

2

SDK のソース コードが利用可能な場合は、64 ビット ターゲット用にコンパイルしてみてください。SDK に一連の検証テストがない場合、これは困難である可能性があり、すぐには明らかにならない問題が発生する可能性があります。ソース コードが利用できない場合、SDK の 64 ビット バージョンは利用できず、将来的に利用できなくなる可能性はわずかですが、少なくとも 1 つのオプションを利用できます。

32 ビット DLL を 64 ビット アプリケーションで使用するには、それを COM インターフェイスでラップし、マーシャリングを処理する代理として使用ますdllhost。これは難しいプロセスではありませんが、引数がマーシャリングされて関数が呼び出されるときにパフォーマンスに影響を与える可能性がありますが、実際の関数自体には影響しません。

SDK をラップする 32 ビット COM オブジェクトのセットを作成し、通常どおり登録します。各オブジェクトがアプリケーション ID で登録されていることを確認してください。これは重要です。dllhost以下に概説する追加の手順により、サロゲートを介して 64 ビット アプリケーションでそれらを使用できるようになります。

  • オブジェクトを正しく登録すると、各オブジェクトのレジストリにキーが作成されます - HKEY_CLASSES_ROOT\Wow6432Node\[APPID]\[GUID]. [APPID]はオブジェクトのアプリケーション ID であり、オブジェクト[GUID]の GUID です。
  • 各キーの下HKEY_CLASSES_ROOT\Wow6432Node\[APPID]\[GUID]に新しい文字列値 ( ) を追加し、REG_SZ名前を付けますDllSurrogate。値を空のままにします。
  • 新しいキーを作成しますHKEY_LOCAL_MACHINE\Software\Classes\[APPID]\[GUID]。サブキーや値を追加する必要はありません。

[注: COM インターフェイスをどのように設計し、共同クラスを実装するかは、あなた次第です。これは一般的なプロセスであるため、オブジェクトの登録に関するドキュメントは含まれていません。上記に含まれるサロゲートでそれらを使用する場合の唯一の違い。オブジェクトを登録するには、MSDN や無数の他のサイトにある既存の情報で十分です。]

于 2013-06-13T14:40:04.560 に答える