Ansi-C函数调用CoUninitialize。
语法是:
void CoUninitialize(void);
我看不到错误处理的任何选项,如何检查CoUninitialize是否成功?
在单元测试期间,有一种奇怪的行为,我看到COM调用在每次使用我的实现时失败。我认为这可能是由于一些未处理的时间耦合造成的。文档没有告诉我CoUninitialize是否阻止。如果不是,我该如何等待它完成?
答案 0 :(得分:2)
CoUninitialize
正在阻止。它不报告成功/失败状态,因为未初始化失败是不可恢复的:尝试使用未完成的COM活动(尤其是封送处理)取消初始化可能最终导致访问冲突。 COM清理尽其所能,但它无法终止所有事情。然后在阻止CoUninitialize
呼叫完成后保持活着,开始变得危险。
就你而言,一旦你确定在通话之前终止了所有的COM活动,你基本上应该盲目地将你的COM初始化调用(成功的调用)与CoUninitialize
配对。
... COM调用每次使用都会失败
也许你应该专注于这些失败。他们与CoUninitialize
的关系可能是你过早地调用CoUninitialize
,否则应该有不同的原因。或者,您根本没有正确配对初始化/取消初始化。