0

我使用 VC# 为另一个应用程序(我们称之为“A”)创建了一个 UI 前端(称为“B”)。B是一个独立的EXE,必须(由于某些原因)由A调用。(DLL由于安全策略是不可能的。)

目前的流量是:

  1. 启动 A(充当 COM 服务器)。
  2. 让 A 使用 system() 调用执行 B。
  3. B 创建到 A 的 COM 连接。
  4. 用户关闭 B
  5. A 也关闭了。<<<这就是问题!

所需的流程是:

...(5) A 不是封闭的。

据我发现,我认为导致不良行为的原因是 COM 引用计数器自动减少。因为 B 正在使用现有的 A 实例,所以计数器之前是 1,因此减少到 0,导致 A 完全关闭。(这是一个真正的问题,因为此时用户可能会丢失 A 中的数据。)

我已经尝试影响 GC 以保持 A 活着,但没有成功。

问题是:

如何防止 A 关闭,例如,通过避免引用计数器的递减?

4

1 回答 1

0

如果您可以访问 A 中的 com 对象,您可以对其执行Marshal.AddRef以增加 ref 计数器,即声明 A 也在使用 COM 对象。

于 2013-01-16T07:56:33.723 回答