私はsdkを持っています。これは x86 用の C++ で記述されており、x64 アプリケーションでこの dll を使用する必要があります。x86 アプリでこの dll を使用しましたが、すべて問題ありませんでした。ただし、Windows の x86 アプリは 1.4 Gb しか使用できません。私のアプリには小さすぎます。どうすればこれを増やすことができますか?
1 に答える
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 や無数の他のサイトにある既存の情報で十分です。]