Question

Je suis un vieux portage serveur COM 32 bits à l'architecture 64 bits.

De nombreuses fonctions prennent tampon des adresses et des décalages en tant que paramètres, comme __int3264 et __int3264 pointeurs. Le problème est que ce type n'est pas généré automatiquement __int64 dans x64 depuis les interfaces sont IDispatch héritées et __int3264 ne sont pas pris en charge avec des interfaces d'automatisation!

Pour les fonctions adresses attendent Je vais remplacer __int3264 * à void *.

paramètres de décalage ont été mis en __int3264 et LONG (32 bits dans l'automatisation + x64). Je ne peux pas utiliser hyper (cartographiée __int64) car il se brisera dans les systèmes 32 bits.

Dois-je utiliser * vide pour tous les paramètres de décalage / adresse ou il y a une autre façon de reporter ces serveur x64 COM?

Était-ce utile?

La solution

void * est autorisée uniquement dans les interfaces [locales] -. Il ne peut pas être rangea (il n'y a aucun moyen de connaître la taille ou la sémantique d'un pointeur void)

Si vous voulez un type polymorphes, utilisez __int3264. Vous avez raison qu'il ne peut pas être utilisé avec l'automatisation, car l'automatisation ne supporte pas les types polymorphes.

Pourquoi ne pas simplement utiliser un __int64 et mettre la valeur 32 bits de la valeur __int64?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top