1

古い32ビットCOMサーバーを64ビットアーキテクチャに移植しています。

多くの関数は、__int3264および__int3264ポインターのように、パラメーターとしてバッファーアドレスとオフセットを取ります。問題は、インターフェイスがIDispatchで継承されており、__ int3264が自動化インターフェイスでサポートされていないため、このタイプがx64で__int64として自動的に生成されないことです。

アドレスを期待する関数の場合、__int3264*をvoid*に置き換えます。

オフセットパラメータは、__ int3264およびLONG(両方とも自動化で32ビット+ x64)として配置されました。ハイパー(__int64としてマップ)は32ビットシステムで機能しなくなるため、使用できません。

すべてのオフセット/アドレスパラメータにvoid*を使用する必要がありますか、それともそれらをx64 COMサーバーに移植する別の方法がありますか?

4

1 に答える 1

2

void *は[ローカル]インターフェースでのみ許可されます-マーシャリングすることはできません(voidポインターのサイズやセマンティクスを知る方法はありません)。

ポリモーフィックタイプが必要な場合は、__int3264を使用してください。自動化はポリモーフィック型をサポートしていないため、自動化では使用できないのは当然です。

__int64を使用して、32ビット値を__int64値に入れてみませんか?

于 2010-12-02T14:46:38.953 に答える