質問

古い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値に配置してみませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top