1

我正在将旧的 32 位 COM 服务器移植到 64 位架构。

许多函数将缓冲区地址和偏移量作为参数,如 __int3264 和 __int3264 指针。问题是这种类型在 x64 中不会自动生成为 __int64,因为接口是 IDispatch 继承的,并且自动化接口不支持 __int3264!

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

偏移参数被放置为 __int3264 和 LONG(在自动化 + x64 中均为 32 位)。我不能使用 hyper(映射为 __int64),因为它会在 32 位系统中中断。

我应该对所有偏移量/地址参数使用 void* 还是有另一种方法将它们移植到 x64 COM 服务器?

4

1 回答 1

2

void * 只允许在 [local] 接口中使用 - 它不能被编组(无法知道 void 指针的大小或语义)。

如果需要多态类型,请使用 __int3264。没错,它不能与自动化一起使用,因为自动化不支持多态类型。

为什么不直接使用 __int64 并将 32 位值放入 __int64 值中?

于 2010-12-02T14:46:38.953 回答