17

ADO データベース接続を使用するマルチスレッド環境で、CoInitialize が呼び出されたかどうかを知りたいです。これを確認するにはどうすればよいですか?

4

1 に答える 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 回目の呼び出しだけがCoUnInitializeCOM を閉じます。

于 2013-01-26T23:55:49.820 に答える