多个原始调用会使应用程序崩溃吗?

时间:2012-04-05 11:44:32

标签: delphi

我有一个应用程序,我创建了一个线程,必须在超时间隔内检查数据库中是否有特定类型的数据。该线程完全负责创建数据库连接,查询和关闭连接。我只在线程执行中进行一次CoInitialize调用,并重复使用Ado连接和Ado查询以供后续使用。

现在我的问题是,我之前(可能是错误地)在循环中留下了CoUnitialize语句以进行数据库数据检查。这意味着,每次都要完成对CoUnitialize的调用。为什么应用程序没有崩溃?由于没有数据要发布,CoUnitialize应该失败。我对此表示怀疑。

先谢谢

1 个答案:

答案 0 :(得分:4)

CoUninitialize是一个WinApi函数,什么都不带,什么都不返回。由于这些WINAPI函数永远不会抛出异常(AFAIK),因此通过调用它们不会导致应用程序崩溃。当被叫太多次时,CoUnitialize会默默地失败。

但是,当调用需要初始化COM的代码时,您的应用程序可能会崩溃。您的应用程序不会崩溃可能意味着两件事:代码不需要CoInitialize,或者其他地方CoInitialize被调用,可能在您的ADO库中。