您可以在VBScript中通过COM-interop使用.NET方法。您必须在方法后附加一个后缀编号,因为重载不会跨越托管/非托管边界。后缀编号似乎没有特定的顺序......后缀编号是如何确定的?
例:
Dim encoding, bytesthroughdotnet
Set encoding = CreateObject("System.Text.UTF8Encoding")
bytesthroughdotnet = encoding.GetBytes_4("你好Ğ") 'get bytes
WScript.Echo LenB(bytesthroughdotnet) 'length
Set encoding = Nothing
怎么来_4用于GetBytes?
(这个问题跟随此response)
微软文档Exported Member Conversion -- Overloaded Methods已经解释了所有。简而言之,@ Nilpo的答案是正确的,最快捷的方式通常只是反复试验。
重载方法
尽管.NET支持重载方法,但IDispatch接口仅依赖于绑定的方法名称,而不是完整的方法签名。因此,它无法支持重载方法。但是,为了提供对类型的重载方法的访问,Tlbexp.exe使用序号来装饰重载方法的名称,以便每个方法名称都是唯一的。
以下托管和非托管签名显示包含数字:
Managed signature
interface INew { public: void DoSomething(); void DoSomething(short s); void DoSomething(short l); void DoSomething(float f); void DoSomething(double d); }
Unmanaged signature
interface INew { void DoSomething(); void DoSomething_2(short s); void DoSomething_3(short l); void DoSomething_4(float f); void DoSomething_5(double d); }
方法的COM签名显示为单个DoSomething方法,后跟一系列装饰的DoSomething_x方法,其中x从2开始,并为方法的每个重载形式递增。请注意,某些重载方法可以从基类型继承。但是,无法保证重载方法将保留与类型版本相同的数字。
虽然.NET客户端可以使用方法的重载形式,但COM客户端必须访问已修饰的方法。对象浏览器使用方法签名显示所有形式的修饰方法,以便您选择正确的方法。后期绑定客户端也可以调用IDispatch::GetIdsOfNames,传递装饰名称以获取任何重载方法的DispID。
由于VBScript不支持重载方法,因此类中的每个重载方法都使用附加到其名称的数字进行唯一命名。它们按原始类中定义的顺序编号。有关ASP Free的文章Using .Net Interops in VBScript中的更多信息。