4

使用 Delphi 7,每当我尝试在线程内执行任何数据库工作时,都会收到此错误:

“尚未调用 CoInitialize”

我在线程内使用了一个包含 ADOConnection.Open 的简单代码。

但是,如果以任何想法的形式使用相同的代码,它可以正常工作吗?

4

3 回答 3

14

@mjn:我不允许在上一个答案中评论您的评论,因此我创建了一个新答案:从构造函数调用 CoInitialize 是程序员所做的典型错误之一。

构造函数在另一个线程的上下文中执行,但您需要在当前线程上初始化 COM(当线程过程正在运行时,即作为 Execute 方法的一部分)请参阅

于 2013-01-13T10:43:23.857 回答
10
procedure TYourThread.execute;
begin
  CoInitialize(nil); 
  FConnection:=TConnection.Create(...);
  try
    ThreadCode ....
  finally
    FConnection.free;
    CoUninitialize;
  end;
end;
于 2013-01-13T07:33:21.707 回答
0

另一个原因是 Application.Initialize; 在主应用程序 DPR 中丢失或注释掉。

于 2015-09-09T05:44:02.883 回答