我可以查看是否已调用CoInitialize?

时间:2013-01-26 23:28:39

标签: delphi activex delphi-xe2 ado

在具有ADO数据库连接的多线程环境中,我想知道是否已调用CoInitialize。我该怎么做呢?

1 个答案:

答案 0 :(得分:11)

通常您不应该进行此项检查,只需拨打CoInitialize / CoUnInitialize对即可。你仍然可以这样做:

function IsCoInitialized: Boolean;
var
  HR: HResult;

begin
  HR:= CoInitialize(nil);
  Result:= (HR and $80000000 = 0) and (HR <> S_OK);
  if (HR and $80000000 = 0) then CoUnInitialize;
end;

如果您在线程中多次调用CoInitialize,则没有问题。第一个调用应返回S_OK,所有后续调用应返回S_FALSE。所有这些呼叫都被认为是成功的,应该通过CoUnInitialize呼叫进行配对。如果您在一个帖子中调用CoInitialize n次,则只有最后一个第CoUnInitialize次调用会关闭COM。