2010-04-12 55 views
1

正在嘗試創建PoC以從COM客戶端公開/調用各種.NET對象。 .NET庫包含一些類和枚舉。將.NET枚舉暴露給COM客戶端{VBScript}

能夠成功訪問VBScript中的類但無法訪問枚舉。 我知道枚舉是值類型,因此'CreateObject'在這種情況下不起作用。

但是我能夠訪問VBA代碼中的相同Enum。

問題:

  • 我怎麼能訪問在VBScript中枚舉?

  • 爲什麼兩個COM客戶端的行爲不同?如果VBA對象瀏覽器可以看到枚舉,爲什麼VBScript允許我創建一個?

.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") 

在此先感謝。

回答

0

Currency是VBA中的一個內置數據類型,它是一個數字類型。你必須在enum前加上你的typelib名稱,以免編譯器模糊不清,即fromCurrency As MyProject.Currency

對於VBScript試試這篇文章:How Can I Access a Type Library From Within a Script?

+0

第一個不是問題。我已經能夠使用對象瀏覽器訪問正確的「貨幣」。 第二點:問題不在於訪問腳本中的tlb,而是來自tlb的Enum。從你提到的鏈接**其次,注意 - 在腳本的第一行 - 我們明確地將值2賦值給常量ForWriting。這是因爲VBScript無法訪問類型庫;因此,我們必須告訴我們的腳本,ForWriting的值等於2. ** 我想重用在tlb中聲明的Enums。 – Codex 2010-04-16 19:24:11

+1

閱讀下頁:「WSF文件的問題在於它們添加的優點(如提供對類型庫的訪問)常常被不必要處理將腳本封裝在一堆XML標記中的缺點所壓倒」 – wqw 2010-04-16 22:57:41