IDLのポータブルアドレスオフセットパラメーター
質問
古い32ビットCOMサーバーを64ビットアーキテクチャに移植しています。
多くの関数は、__int3264および__int3264ポインターとして、バッファーアドレスとオフセットをパラメーターとして採用しています。問題は、インターフェイスがIdispatch-Inheritedであり、__int3264が自動化インターフェイスでサポートされていないため、x64で__int64としてこのタイプが自動的に生成されないことです。
アドレスを期待する関数については、__int3264*をvoid*に置き換えます。
オフセットパラメーターは、__int3264およびlong(両方とも自動化+x64で32ビット)として配置されました。 32ビットシステムで壊れるため、Hyper(__int64としてマッピングされた)は使用できません。
すべてのオフセット/アドレスパラメーターにvoid*を使用する必要がありますか、それともx64 comサーバーにそれらを移植する別の方法がありますか?
解決
void *は[ローカル]インターフェイスでのみ許可されます - マーシャル化することはできません(ボイドポインターのサイズまたはセマンティクスを知る方法はありません)。
多型タイプが必要な場合は、__int3264を使用してください。自動化が多型タイプをサポートしていないため、自動化で使用できないことは正しいことです。
__int64を使用して、32ビット値を__int64値に配置してみませんか?
所属していません StackOverflow