2012-12-16 1 views
0

J'implémente une interface COM pour une application existante écrite en C++. L'interface COM est utilisée pour automatiser l'application à partir de VBScript. L'une des méthodes que je veux appeler via l'interface COM a un paramètre qui, en C++, a un type enum. J'ai défini un type enum correspondant dans le fichier IDL, et oleview montre les valeurs sont enregistrées:Utilisation d'une énumération d'une bibliothèque de types dans VBScript

// Copied from type library viewer  
typedef enum 
{ 
    MyValueA = 0, 
    MyValueB = 1, 
    MyValueC = 2 
} MyEnum; 

Cependant, quand je passe une de ces valeurs dans VBScript, la valeur reçue par la mise en œuvre du RPC est toujours 0. Je suppose que je n'utilise pas la bonne syntaxe VBScript. En passant une valeur entière travaille directement et passer quelque chose au hasard (comme ghfitgr) conduit également à 0, ce qui est probablement ce qui se passe à MyValueB, etc.

J'ai trouvé une affirmation selon laquelle enum.member doit être utilisé, ce qui serait MyEnum.MyValue, mais cela entraîne une erreur de syntaxe (object required: MyEnum). Qu'est-ce que je fais mal?

+0

Je vous recommande de lire http://goo.gl/88n6F –

Répondre

0

Late-bindng VBScript ne peut/ne veut pas extraire ces informations du fichier .dll, tout ce que vous obtenez sont des objets (par CreateObject()) et ce qu'ils fournissent. Alors épargnez-vous beaucoup de tracas & hacks en définissant les valeurs avec des noms décents en utilisant Const.

Pour clarifier:

Je voulais dire: Const dans le code VBScript.

+0

J'ai ajouté 'const int HorClassic = 1;', mais rien n'a changé. En fait, la visionneuse de bibliothèque de types n'affiche même pas l'identificateur. J'ai apporté une autre modification à la bibliothèque de types, qui s'affiche, donc ce n'est pas un problème d'enregistrement. En fait, je ne comprends pas pourquoi la liaison tardive ne peut pas utiliser les valeurs 'enum' mais réussit à utiliser les valeurs' const'. – Dabbler

Questions connexes