我将旧的32位COM服务器移植到64位体系结构。

许多功能将缓冲地址和偏移作为参数,为__INT3264和__INT3264指针。问题在于,由于接口是IDISPATCH联合的,因此该类型不会自动生成为X64中的__int64,并且__INT3264不受自动化接口的支持!

对于期望地址的函数,我将替换__int3264*为void*。

偏移参数以__INT3264和长(自动化+x64的32位)为__INT3264。我不能使用Hyper(映射为__Int64),因为它会在32位系统中破裂。

我应该使用void*用于所有偏移/地址参数,还是还有另一种将其移植到X64 COM服务器的方法?

有帮助吗?

解决方案

void *仅在[local]界面中允许 - 无法编辑(无法知道无效指针的大小或语义)。

如果您想要多态类型,请使用__int3264。您是对的,因为自动化不支持多态类型,因此不能与自动化一起使用。

为什么不只是使用__int64并将32位值放在__int64值中?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top