2010-11-12 43 views
1

Je transfère un ancien serveur COM 32 bits vers une architecture 64 bits.Paramètre de décalage d'adresse portable dans IDL

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

Pour les fonctions qui attendent des adresses, je remplacerai __int3264 * par void *.

Les paramètres de décalage ont été mis comme __int3264 et LONG (tous les deux 32 bits dans automation + x64). Je ne peux pas utiliser hyper (mappé en tant que __int64) car il va casser dans les systèmes 32 bits.

Devrais-je utiliser void * pour tous les paramètres de décalage/d'adresse ou existe-t-il un autre moyen de les porter sur le serveur COM x64?

Répondre

2

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

Si vous voulez un type polymorphe, utilisez __int3264. Vous avez raison de dire qu'il ne peut pas être utilisé avec l'automatisation car l'automatisation ne prend pas en charge les types polymorphes. Pourquoi ne pas simplement utiliser un __int64 et mettre la valeur 32bit dans la valeur __int64?