【问题标题】:Exposing .NET enums to COM clients{VBScript}将 .NET 枚举暴露给 COM 客户端{VBScript}
【发布时间】:2011-02-07 03:17:29
【问题描述】:

我正在尝试创建 PoC 以从 COM 客户端公开/调用各种 .NET 对象。 .NET 库包含一些类和枚举。

我能够成功访问 VBScript 中的类,但无法访问枚举。 我知道枚举是值类型,因此“CreateObject”在这种情况下不起作用。

但我能够在 VBA 代码中访问相同的枚举。

问题:

  • 如何访问 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")

提前致谢。

【问题讨论】:

    标签: vba com interop vbscript enums


    【解决方案1】:

    Currency 是 VBA 中的内置数据类型,数字类型。你必须在你的枚举前面加上你的类型库名称,以免对编译器产生歧义,即fromCurrency As MyProject.Currency。

    对于 VBScript,试试这篇文章:How Can I Access a Type Library From Within a Script?

    【讨论】:

    • 第一个没问题。我已经能够使用对象浏览器访问正确的“货币”。第二点:问题不在于访问脚本中的 tlb,而是来自 tlb 的 Enum。从您提到的链接第二,请注意——在脚本的第一行——我们明确地将值 2 分配给常量 ForWriting。那是因为 VBScript 无法访问类型库;因此,我们必须告诉我们的脚本 ForWriting 的值等于 2。 我想重用 tlb 中声明的枚举。
    • 阅读页面:“WSF 文件的问题在于,它们添加的优点(例如提供对类型库的访问)通常被必须处理将脚本包装在一堆 XML 标签”
    猜你喜欢
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 2023-03-17
    • 1970-01-01
    • 2017-04-16
    相关资源
    最近更新 更多