VB6 и COM: нельзя использовать пользовательский параметр типа в функции COM - PullRequest
0 голосов
/ 15 августа 2011

Я использую COM-объект в VB6. COM-объект имеет функцию Foo (Long, Long, Rect). Rect - это структура, определенная в реализации COM-объекта. Мой код VB6 (кнопка на форме), как показано ниже:

Private Sub btnTestCom_Click()
    Set ComObj = CreateObject("ObjectName")
    Dim rect As DISPLAY_RECT

    rect.Left = 20
    rect.Top = 20

    ComObj.Foo(101, 0, rect) ' Error here
End Sub

В последней строке выдается ошибка компиляции: «Только определенные пользователем типы, определенные в открытых объектных модулях, могут быть приведены к варианту или из него или переданы функциям с поздней привязкой».

Другие функции COM, которые не имеют пользовательских типов параметров, работают нормально.

Как мне решить эту проблему?

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 августа 2011

Вызов функции с поздней привязкой , потому что ваша переменная ComObj не напечатана.Вы можете попытаться объявить это, что-то вроде

Dim ComObj As SomeObjectDefinedInComImplementation 

EDIT

Я бы также проверил, что вы на самом деле используете DISPLAY_RECT из библиотеки COM.Откройте браузер объектов (нажмите F2) и найдите во всех библиотеках DISPLAY_RECT.

  • Если вы видите только один результат, проверьте, находится ли он в правильной библиотеке COM.
    • Если это из правильной библиотеки COM, должна быть другая проблема.
    • Если это не из той библиотеки COM: проверьте, есть ли у вас ссылка на правильную библиотеку (в ссылках проекта).Если у вас определенно есть ссылка, дважды проверьте, действительно ли вы должны передать DISPLAY_RECT
  • Если вы видите несколько результатов, VB6, возможно, выбирает неправильную библиотеку.Попробуйте явно указать DISPLAY_RECT с именем библиотеки Dim rect As TheCorrectLibraryName.DISPLAY_RECT
0 голосов
/ 15 августа 2011

Предполагая, что DISPLY_RECT является типом, вы не можете передавать типы в публичный метод COM или возвращать тип из публичной функции COM в VB6. Вам придется создать класс, дублирующий тип, и вспомогательную функцию, которая принимает класс в качестве параметра и возвращает тип.

...