3

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

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

提前致谢

4

1 回答 1

5

CoUninitialize是一个 WinApi 函数,它不接受任何内容,也不返回任何内容。由于这些 WINAPI 函数从不抛出异常 (AFAIK),因此您的应用程序不会因调用它们而崩溃。CoUnitialize当调用太多次时,只会默默地失败。

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

于 2012-04-05T12:54:31.327 回答