Pregunta

Estoy portar un viejo servidor COM de 32 bits a la arquitectura de 64 bits.

Muchas funciones tiene amortiguar direcciones y compensaciones como parámetros, como __int3264 y __int3264 punteros. El problema es que este tipo no se genera automáticamente como __int64 en x64 desde las interfaces se heredan-IDispatch y __int3264 no es compatible con las interfaces de automatización!

Para las funciones que esperan direcciones que reemplazará __int3264 * a void *.

parámetros de desplazamiento se pusieron como __int3264 y LONG (tanto de 32 bits en la automatización + x64). No puedo usar hiper (asignada como __int64), ya que se romperá en sistemas de 32 bits.

¿Debo usar void * para todos los parámetros de desplazamiento / de dirección o hay otra manera de puerto a los 64 COM servidor?

¿Fue útil?

Solución

void * sólo se permite en las interfaces [locales] -. No se puede marshalled (no hay manera de saber el tamaño o la semántica de un puntero void)

Si desea un tipo polimórfico, el uso __int3264. Tienes razón que no se puede utilizar con la automatización debido a la automatización no es compatible con los tipos polimórficos.

¿Por qué no utilizar un __int64 y poner el valor de 32 bits en el valor __int64?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top