我正在将旧的32位COM服务器移植到64位架构。
许多函数将缓冲区地址和偏移量作为参数,如__int3264和__int3264指针。问题是这种类型不会在x64中自动生成为__int64,因为接口是IDispatch继承的,而自动化接口不支持__int3264!
对于期望地址的函数,我将__int3264 *替换为void *。
偏移参数设置为__int3264和LONG(自动化中的32位+ x64)。我不能使用hyper(映射为__int64),因为它会在32位系统中中断。
我应该对所有偏移/地址参数使用void *还是有另一种方法将它们移植到x64 COM服务器?
答案 0 :(得分:2)
void *仅在[local]接口中允许 - 它不能被编组(无法知道void指针的大小或语义)。
如果需要多态类型,请使用__int3264。你是对的,它不能用于自动化,因为自动化不支持多态类型。
为什么不使用__int64并将32位值放在__int64值中?