【问题标题】:Delphi .exe COM server starting oddityDelphi .exe COM 服务器启动异常
【发布时间】:2016-06-20 04:26:56
【问题描述】:

我有一个用 Delphi Seattle 编写的 Win32 .exe,它实现了一个函数的 COM 接口。
如果我从程序本身内部调用 CreateOleObject(),我会对服务器的行为方式感到困惑。
实例化模型设置为ciSingleInstance,因此我希望在每次调用时都会创建一个新实例(假设之前的实例仍在运行)。

实际发生的情况是第一次调用不会创建新实例,但第二次会创建。
如果第一次调用运行完成,第二个实例会再次创建一个新实例,即使程序应该返回到其默认状态。

我该怎么做

a) 在第一次调用时强制创建第二个实例,或者
b) 将程序返回到真正的默认状态,以便多次运行完成不会启动第二个实例。

【问题讨论】:

  • 默认状态是“在此进程的整个生命周期内只接受一个CoCreateInstance 调用”。鉴于此,您的程序似乎按预期工作。您可能通过 CoCreateInstance 以外的方式运行它,所以它仍然等待它的唯一一个 CoCreateInstance - 但一旦它得到它,它就再也不需要了。
  • “每个进程生命周期一次”解释了事情和含义,如果我调用 CreateOleObject() 一次,如果程序没有被自动化,则可以回答我的第一个问题。非常感谢。

标签: delphi com


【解决方案1】:

ciSingleInstance 作为REGCLS_SINGLEUSE 传递给CoRegisterClassObject 的内部调用,这可能会导致这种不良行为。

【讨论】:

    猜你喜欢
    • 2020-07-16
    • 1970-01-01
    • 2011-11-10
    • 2023-03-25
    • 2015-04-19
    • 1970-01-01
    • 2013-01-28
    • 2011-05-21
    • 2020-10-06
    相关资源
    最近更新 更多