CoUninitialize功能。如何检查错误以及如何等待完成

时间:2014-05-23 11:47:30

标签: c com

Ansi-C函数调用CoUninitialize

语法是:

void CoUninitialize(void);

我看不到错误处理的任何选项,如何检查CoUninitialize是否成功?

在单元测试期间,有一种奇怪的行为,我看到COM调用在每次使用我的实现时失败。我认为这可能是由于一些未处理的时间耦合造成的。文档没有告诉我CoUninitialize是否阻止。如果不是,我该如何等待它完成?

1 个答案:

答案 0 :(得分:2)

CoUninitialize正在阻止。它不报告成功/失败状态,因为未初始化失败是不可恢复的:尝试使用未完成的COM活动(尤其是封送处理)取消初始化可能最终导致访问冲突。 COM清理尽其所能,但它无法终止所有事情。然后在阻止CoUninitialize呼叫完成后保持活着,开始变得危险。

就你而言,一旦你确定在通话之前终止了所有的COM活动,你基本上应该盲目地将你的COM初始化调用(成功的调用)与CoUninitialize配对。

  

... COM调用每次使用都会失败

也许你应该专注于这些失败。他们与CoUninitialize的关系可能是你过早地调用CoUninitialize,否则应该有不同的原因。或者,您根本没有正确配对初始化/取消初始化。