Требуется объект взаимодействия VB6 .NET - PullRequest
1 голос
/ 10 июля 2011

Я знаю, что исправил эту же проблему около 6 лет назад ... но я не могу вспомнить, в чем дело.

У меня есть класс .NET.Это видимо COM (но не зарегистрировано COM).Возвращается в результате вызова класса, зарегистрированного в COM.Поэтому мой код VB6 заканчивается на

Dim instance as Variant
' call .NET exposed tlb to set instance with a COM visible class
Dim wrapper as New ComWrapper  ' this is a .NET class COM exposed and registered
Set instance = wrapper.MyClassInstance ' MyClassInstance is an instance of COM visible, but not COM registered MyClass defined below
instance.DoIt 1

Соответствующим классом является MyClass

public class MyClass
{
    public void DoIt(int id) { ... }
}

Call instance.DoIt 1 вызывает исключение "Требуется объект"Если я правильно помню, это как-то связано с тем, что целое число 1 должно быть упаковано или распаковано или что-то, что VB6 не делает автоматически для вас ... но я не могу вспомнить, как это исправить... Если метод DoIt не имеет аргументов, все работает нормально ...

Кто-нибудь знает, как это исправить?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 10 июля 2011

Это будет короткий бокс, целые числа VB6 - 16 бит. Кроме того, по умолчанию в VB6 передается аргумент ByRef. Объявление аргумента как object должно работать. Это было слишком давно, но я думаю, что синтаксис неправильный. Это должно быть либо

instance.DoIt 1

или

Call instance.DoIt(1)

Обратите внимание на круглые скобки. Там мало причин, чтобы сделать это поздно. Пока ваш класс [ComVisible], он будет присутствовать в библиотеке типов, и вы можете просто объявить тип переменной VB6, чтобы компилятор мог проверить ваш код и сгенерировать наиболее оптимальный вызов. Регистрация класса не требуется.

Dim instance As MyClass
0 голосов
/ 10 июля 2011

Попробуйте позднее связывание с instance, объявив его как Object.

...