在具有 ADO 数据库连接的多线程环境中,我想知道是否调用了 CoInitialize。我将如何检查这个?
问问题
4117 次
1 回答
15
通常你不应该做这个检查而只是跟注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 次,则只有最后的第 n 次CoUnInitialize
调用会关闭 COM。
于 2013-01-26T23:55:49.820 回答