ActiveX связь - PullRequest
       7

ActiveX связь

0 голосов
/ 27 октября 2008

Я разрабатываю ActiveX EXE, который предоставляет определенный класс стороннему программному обеспечению. Это стороннее программное обеспечение создает экземпляр объекта этого класса и использует его методы.

Странно, но это стороннее программное обеспечение уничтожает свой объект моего открытого класса, как только вызывает определенный метод, но я понятия не имею, почему это происходит.

Единственная подсказка, которую я имею, состоит в том, что этот метод является единственным, который возвращает значение. Все остальные являются простыми «подпрограммами», которые не возвращают никакого значения, и когда их вызывают, ничего плохого не происходит.

Я использую VB6.

Ребята, вы понимаете, почему это происходит?

Ответы [ 2 ]

1 голос
/ 27 октября 2008

Ваш объект "уничтожается" при удалении последней ссылки на него. Это нормальное поведение COM. Или ваш объект умирает незаметно, а стороннее приложение получает ошибку activex?

Еще несколько вопросов:

  • Я не знаю, что вы имеете в виду под "сервером данных"?
  • Есть ли у вас доступ к исходному коду стороннего приложения?
  • Вы уверены, что стороннее приложение содержит ссылку на ваш объект?
  • Вызывается ли метод Object_Terminate ваших объектов?

EDIT: Хорошо, когда Class_Terminate вызывается, становится очевидным, что стороннее приложение потеряло ссылку на ваш объект.

0 голосов
/ 27 октября 2008

Как сказал Ян в COM, это нормально, что ваш объект завершается, если никто не ссылается на него. Если вы хотите выполнить какое-либо кэширование (например, оставить соединение с БД открытым), вы можете использовать глобальную переменную, определенную в bas-модуле.

basGlobal.bas

Global AGlobalVariable As Object

Connector.cls

Public Function GetFoo() As Object
  If AGlobalVariable Is Nothing then
    Set AGlobalVariable = ...
  End If 
  Set GetFoo = AGlobalVariable
End Function
...