Определение номера суффикса метода .Net в VBScript (COM-взаимодействие) - PullRequest
3 голосов
/ 18 марта 2012

Вы можете использовать методы .NET через COM-взаимодействие в VBScript.Вы должны добавить определенный номер суффикса к методу, так как перегрузки не пересекают управляемую / неуправляемую границу.Номер суффикса, похоже, не имеет определенного порядка ... как определяется номер суффикса?

Пример:

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?

(за этим вопросом следует ответ )

Ответы [ 2 ]

1 голос
/ 01 мая 2019

Документ Microsoft Преобразование экспортированного члена - перегруженные методы уже все объясняют. Короче говоря, ответ @Nilpo правильный, самый быстрый путь - это обычно метод проб и ошибок .

перегруженные методы

Хотя .NET поддерживает перегруженные методы, интерфейс IDispatch полагается исключительно на имя метода для привязки, а не на полную сигнатуру метода. Поэтому он не способен поддерживать перегруженные методы. Однако для предоставления доступа к перегруженным методам типа Tlbexp.exe украшает имена перегруженных методов порядковым номером, чтобы каждое имя метода было уникальным.

Следующие управляемые и неуправляемые подписи показывают включение чисел:

Управляемая подпись

interface INew { public:
    void DoSomething();
    void DoSomething(short s);
    void DoSomething(short l);
    void DoSomething(float f);
    void DoSomething(double d);
}

Неуправляемая подпись

 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 любого перегруженного метода.

1 голос
/ 18 марта 2012

Поскольку VBScript не поддерживает перегруженные методы, каждый перегруженный метод в классе именуется уникально, используя числа, добавленные к его имени.Они нумеруются в том порядке, в котором они определены в исходном классе.Больше информации в моей статье Использование .Net Interops в VBScript на ASP Free.

...