2008-10-27 7 views
0

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

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

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

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

Есть ли у вас какие-либо идеи, почему это происходит?

ответ

1

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

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

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

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

+0

Он не должен быть удален, так как это сервер данных для приложения третьих сторон. У стороннего приложения нет ошибки. – 2008-10-27 14:55:26

+0

Я не знаю, что вы имеете в виду с «сервером данных». У вас есть доступ к исходному коду стороннего приложения? Вы уверены, что стороннее приложение содержит ссылку на ваш объект? Являются ли ваши объекты Class_Terminate Method? – Jan 2008-10-27 14:59:21

0

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

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