我有一个自定义 COM 服务器实现。服务器使用 TComObjectFactory 创建用于客户端连接的 COM 对象。
我是这样写的:
function TPsOPCProviderClientFactory.CreateComObject(const Controller:
IUnknown): TComObject;
begin
FStartupCompleteEvent.WaitFor(INFINITE);
if Provider.State = OPC_STATUS_SUSPENDED then // Server already shutdown
raise EAbort.Create('Server shut down.');
Result := inherited CreateComObject(Controller);
(Result as TPsOPCProviderClient).Provider := Provider;
end;
FStartupCompleteEvent 用于确保应用程序在第一个连接通过之前准备就绪,Provider.State 用于在服务器将要关闭时禁用客户端连接。
现在看来,这不是取消对象创建的正确方法:如果引发异常,它将在屏幕上弹出一个带有“DAX 错误”的消息对话框,并且客户端可能会崩溃。
使对象创建失败的正确方法是什么 - 还是必须始终成功?
该代码用于一个组件框架,该框架可用于自 Delphi 5 以来的所有 Delphi/C++Builder 版本。