Jer*_*dge 17 delphi activex ado delphi-xe2
在具有ADO数据库连接的多线程环境中,我想知道是否已调用CoInitialize.我该如何检查?
klu*_*udg 14
通常你不应该做这个检查只是打电话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;
Run Code Online (Sandbox Code Playgroud)
如果CoInitialize在一个线程中多次调用,则没有问题.第一个调用应该返回S_OK,所有后续调用都应该返回S_FALSE.所有这些呼叫都被认为是成功的,应该通过CoUnInitialize呼叫配对.如果CoInitialize在一个线程中调用了n次,则只有最后一个第n个CoUnInitialize调用关闭COM.