Adresse Portable décalage paramètre IDL
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?
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?