【发布时间】:2016-06-20 04:26:56
【问题描述】:
我有一个用 Delphi Seattle 编写的 Win32 .exe,它实现了一个函数的 COM 接口。
如果我从程序本身内部调用 CreateOleObject(),我会对服务器的行为方式感到困惑。
实例化模型设置为ciSingleInstance,因此我希望在每次调用时都会创建一个新实例(假设之前的实例仍在运行)。
实际发生的情况是第一次调用不会创建新实例,但第二次会创建。
如果第一次调用运行完成,第二个实例会再次创建一个新实例,即使程序应该返回到其默认状态。
我该怎么做
a) 在第一次调用时强制创建第二个实例,或者
b) 将程序返回到真正的默认状态,以便多次运行完成不会启动第二个实例。
【问题讨论】:
-
默认状态是“在此进程的整个生命周期内只接受一个
CoCreateInstance调用”。鉴于此,您的程序似乎按预期工作。您可能通过CoCreateInstance以外的方式运行它,所以它仍然等待它的唯一一个CoCreateInstance- 但一旦它得到它,它就再也不需要了。 -
“每个进程生命周期一次”解释了事情和含义,如果我调用 CreateOleObject() 一次,如果程序没有被自动化,则可以回答我的第一个问题。非常感谢。