【发布时间】:2008-10-27 14:37:56
【问题描述】:
我正在开发一个ActiveX EXE,它将特定类公开给第三方软件。这个第三方软件实例化了这个类的一个对象并使用它的方法。
奇怪的是,这个第三方软件一调用特定方法就销毁了我暴露的类的对象,但我不知道为什么会发生这种情况。
我唯一的线索是这个方法是唯一一个返回值的方法。所有其他的都是简单的“subs”,不返回任何值,当它们被调用时不会发生任何错误。
我正在使用 VB6。
你们知道为什么会这样吗?
【问题讨论】:
我正在开发一个ActiveX EXE,它将特定类公开给第三方软件。这个第三方软件实例化了这个类的一个对象并使用它的方法。
奇怪的是,这个第三方软件一调用特定方法就销毁了我暴露的类的对象,但我不知道为什么会发生这种情况。
我唯一的线索是这个方法是唯一一个返回值的方法。所有其他的都是简单的“subs”,不返回任何值,当它们被调用时不会发生任何错误。
我正在使用 VB6。
你们知道为什么会这样吗?
【问题讨论】:
当最后一个对它的引用被删除时,你的对象会被“销毁”。那是正常的 COM 行为。还是您的对象毫无例外地死了,而第三方应用程序出现了 activex 错误?
还有一些问题:
编辑: 好的,当 Class_Terminate 被调用时,很明显,第三方应用程序已经删除了对您的对象的引用。
【讨论】:
Class_Terminate 方法被调用了。
正如 Jan 在 COM 中所说,如果没有人引用它,则终止您的对象是正常的。如果您想做某种缓存(例如保持数据库连接打开),您可以使用在 bas-module 中定义的全局变量。
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
【讨论】: