2010-04-12 7 views
1

Essayez de créer une PoC pour exposer/invoquer divers objets .NET à partir de clients COM. La bibliothèque .NET contient des classes et des énumérations. Je peux accéder avec succès aux classes dans VBScript mais ne pas pouvoir accéder aux Énumérations. Je sais que les Enums sont des types de valeur et donc 'CreateObject' ne fonctionnera pas dans ce cas.Exposition d'enums .NET à des clients COM {VBScript}

Mais je suis capable d'accéder au même code Enum dans VBA.

Questions:

  • Comment puis-je accéder aux énumérations en VBScript? Pourquoi le comportement diffère-t-il dans les deux clients COM? Si le navigateur d'objet VBA peut voir l'énumération, pourquoi VBScript ne permet-il pas d'en créer une?

.NET

[ComVisible(true)] 
[GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")]   
public enum Currency 
{   
    GBP = CurrencyConvertorBL.CurrencyConvertorRef.Currency.GBP,   
    USD = CurrencyConvertorBL.CurrencyConvertorRef.Currency.USD,   
    INR = CurrencyConvertorBL.CurrencyConvertorRef.Currency.INR, 
    AUD = CurrencyConvertorBL.CurrencyConvertorRef.Currency.AUD 
} 

VBA

Private Function ConvertCurrency(fromCurrency As Currency, 
toCurrency As Currency) As Double 

VBScript ???

Set currencyConvertorCCY = CreateObject("CurrencyConvertorBL.Currency") 

Merci d'avance.

Répondre

0

Currency est un type de données intégré dans VBA, un numérique. Vous devez préfixer votre énumération avec votre nom de typelib pour ne pas être ambigu pour le compilateur, c'est-à-dire fromCurrency As MyProject.Currency.

Pour VBScript essayer cet article: How Can I Access a Type Library From Within a Script?

+0

Le premier est pas un problème. J'ai pu accéder à la bonne devise en utilisant le navigateur d'objets. Deuxième point: le problème n'est pas d'accéder à un tlb dans le script mais à un Enum de la tlb. Du lien que vous avez mentionné ** Deuxièmement, notez que - dans la toute première ligne du script - nous assignons explicitement la valeur 2 à la constante ForWriting. C'est parce que VBScript n'a pas accès aux bibliothèques de types; par conséquent, nous devons dire à notre script que la valeur de ForWriting est égale à 2. ** Je veux réutiliser les Enums déclarées dans la tlb. – Codex

+1

Lire la page: "Le problème avec les fichiers WSF est que les avantages qu'ils ajoutent (comme l'accès à une bibliothèque de types) sont souvent compensés par les inconvénients d'avoir à traiter votre script dans un tas de balises XML" – wqw

Questions connexes