3

有人可以建议我如何终止或绕过CreateObject偶尔需要几分钟才能完成的操作吗?基本上我有这个代码:

Set m_Zeacom = CreateObject("QmCOM.QIntegrate")

这在大多数情况下都会立即生效,但对于某些用户来说可能需要几分钟(为什么 - 在这种情况下并不重要)。所以我想做的是设置CreateObject执行时间限制,要么杀死它,要么将我的应用程序与它分离。我一直在DoEvents尝试在挂起时继续处理其他代码CreateObject,但没有任何运气。

4

1 回答 1

4

另一种选择是在您的进程之外运行的 ActiveX EXE 中调用 CreateObject。

  • 所以说我们称之为ActiveX EXE OutOfBounds.Factory。
  • 您在类中实现了一个回调接口,例如IListener.Callback,它接受一个对象作为回调的一部分。
  • 您创建一个 OutOfBounds.Factory 类。
  • 越界工厂类有一个调用GetQmCom的方法,它接受IListener回调。
  • ActiveX EXE 中的GetQmCom方法会立即返回,但在后台(例如在计时器事件中)它会创建对象,一旦创建对象,它就会调用传入创建的对象的回调。
  • 这样做的缺点是另一个进程拥有该对象,因此当您在进程中使用它时,您最终会进行跨进程调用。如果你不怎么称呼它,你可能会侥幸逃脱。
  • 缺点是,您的所有代码都需要处理没有对象的实际实例,因为它何时从 ActiveX EXE 到达是不确定的(但如果您愿意跳过它或时间,您可能无论如何都需要这样做出去)。
  • 优点是,使用 ActiveX EXE(取决于您的编码方式),您可以根据需要缓存/共享实例。

我没有VB6了,否则我会为你举个例子。

您可能会发现这个关于 ActiveX EXE 有用的 MS 链接http://msdn.microsoft.com/en-us/library/aa262306(v=vs.60).aspx

于 2014-06-20T16:38:32.797 回答