0

我正在开发一个ActiveX EXE向第三方软件公开特定类的工具。这个第三方软件实例化了这个类的一个对象并使用它的方法。

奇怪的是,这个第三方软件一调用特定方法就破坏了我暴露的类的对象,但我不知道为什么会发生这种情况。

我唯一的线索是这个方法是唯一一个返回值的方法。所有其他的都是简单的“subs”,不返回任何值,当它们被调用时,不会发生任何错误。

我正在使用VB6。

你们知道为什么会这样吗?

4

2 回答 2

1

当最后一个对它的引用被删除时,您的对象将被“销毁”。那是正常的 COM 行为。或者您的对象是否毫无例外地死去,而第三方应用程序出现了 activex 错误?

还有一些问题:

  • 我不知道您所说的“数据服务器”是什么意思?
  • 您可以访问第三方应用程序的源代码吗?
  • 您确定第三方应用程序包含对您的对象的引用吗?
  • 您的对象是否调用了 Class_Terminate 方法?

编辑: 好的,当 Class_Terminate 被调用时,很明显,第三方应用程序已经放弃了对您的对象的引用。

于 2008-10-27T14:42:30.310 回答
0

正如 Jan 在 COM 中所说,如果没有人引用它,则终止您的对象是正常的。如果您想做某种缓存(例如保持 DB 连接打开),您可以使用在 bas-module 中定义的全局变量。

basGlobal.bas

Global AGlobalVariable As Object

连接器.cls

Public Function GetFoo() As Object
  If AGlobalVariable Is Nothing then
    Set AGlobalVariable = ...
  End If 
  Set GetFoo = AGlobalVariable
End Function
于 2008-10-27T15:47:29.647 回答