Frage

Ich bin Portierung einen alten 32-Bit-COM-Servers auf 64-Bit-Architektur.

nehmen Viele Funktionen Adressen und Offsets als Parameter Puffer, wie __int3264 und __int3264 Zeiger. Das Problem ist, dass diese Art nicht automatisch als __int64 in x64 erzeugt wird, da die Schnittstellen IDispatch-vererbt werden, und __int3264 nicht mit Automatisierungsschnittstellen unterstützt!

Für Funktionen Adressen erwarten Ich werde __int3264 * auf void * ersetzen.

Offset-Parameter wurden als __int3264 und LONG (sowohl 32-Bit in der Automation + x64) setzen. Ich kann nicht hyper verwenden (abgebildet als __int64), da es in 32-Bit-Systemen brechen wird.

Sollte ich void * für alle Offset / Adressparameter oder gibt es eine andere Art und Weise zu portieren diejenigen zu x64-COM-Server?

War es hilfreich?

Lösung

void * ist in [local] Schnittstellen nur erlaubt -. Es kann nicht rangieren (es gibt keine Möglichkeit, die Größe oder Semantik eines void-Zeiger des Wissens)

Wenn Sie eine polymorphe Art wollen, verwenden Sie __int3264. Du hast Recht, dass es nicht mit der Automatisierung eingesetzt werden kann, da die Automatisierung nicht polymorphe Typen unterstützt.

Warum nicht einfach eine __int64 verwenden und den 32-Bit-Wert im __int64 Wert setzen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top