Eug*_*ene 5 .net vbscript overloading com-interop
您可以通过 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
Run Code Online (Sandbox Code Playgroud)
为什么 _4 用于 GetBytes?
(此问题遵循此回复)
Microsoft 文档导出成员转换 - 重载方法已经解释了所有内容。简而言之,@Nilpo 的答案是正确的,最快的方法通常只是尝试和错误。
重载方法
尽管.NET支持重载方法,但IDispatch接口仅依赖于方法名称进行绑定,而不是完整的方法签名。因此它无法支持重载方法。但是,为了提供对类型的重载方法的访问,Tlbexp.exe 使用序数修饰重载方法的名称,以便每个方法名称都是唯一的。
以下托管和非托管签名显示包含数字:
托管签名
Run Code Online (Sandbox Code Playgroud)interface INew { public: void DoSomething(); void DoSomething(short s); void DoSomething(short l); void DoSomething(float f); void DoSomething(double d); }非托管签名
Run Code Online (Sandbox Code Playgroud)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。
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |