首页 新闻 会员 周边 捐助

程序退出时提示"CoInitialize Failed!",什么意思?

0
悬赏园豆:5 [已解决问题] 解决于 2013-10-23 14:51

如题,我想知道这是什么意思以及引发这个错误的原因及解决办法,求大神指教??

冷水寒冰的主页 冷水寒冰 | 初学一级 | 园豆:0
提问于:2013-08-22 13:51
< >
分享
最佳答案
0

CoInitialize:用以初始化 COM 库,相对应的还有个复杂版本:CoInitializeEx。

请检查 CoInitialize 的返回值或调用 GetLastError得到错误码,以确定具体的错误原因。

我怀疑你已经调用 CoInitialize,并且成功,所以第二次调用会返回失败,告之你 COM 库已经初始化。

收获园豆:5
Launcher | 高人七级 |园豆:45050 | 2013-08-22 13:59

额……,我的是wpf程序,能不能告诉我在哪调用getlasterror,还有如何告知com库已经初始化,因为程序不是我写的,我只是在修改,不太了解,不好意思。

冷水寒冰 | 园豆:0 (初学一级) | 2013-08-23 08:10

@冷水寒冰: GetLastError 是 Win32 API,你的用 p/invoke 方式来引用,在你的场景里暂时用不到。

HRESULT hr = CoInitialize(NULL);

hr 可能的返回值:

S_OK: The COM library was initialized successfully on this thread.

S_FALSE: The COM library is already initialized on this thread.

E_INVALIDARG: Invalid argument.

E_OUTOFMEMORY: out of memeory.

E_UNEXPECTED: unexepected.

RPC_E_CHANGED_MODE:A previous call to CoInitializeEx specified the concurrency model for this thread as multithread apartment (MTA). This could also indicate that a change from neutral-threaded apartment to single-threaded apartment has occurred.

你的情况,很有可能是 S_FALSE。因为提示不明确,不知道具体的 hr 值是多少。

 

程序也不是我写的,我只是在回答你的问题,所以我也不知道如何告知你 COM 库已经初始化。我只知道如果 hr 的返回值是 S_FALSE 的话,表示:“The COM library is already initialized on this thread.”。

当然为了防止你粗心大意,我再提示下上面这句话的重点,“on this thread”,即 COM 库初始化的作用范围是线程

Launcher | 园豆:45050 (高人七级) | 2013-08-23 09:21

@Launcher: 额,谢谢大神。

冷水寒冰 | 园豆:0 (初学一级) | 2013-08-23 11:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册