在具有ADO数据库连接的多线程环境中,我想知道是否已调用CoInitialize。我该怎么做呢?
答案 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。