CoInitialize:用以初始化 COM 库,相对应的还有个复杂版本:CoInitializeEx。
请检查 CoInitialize 的返回值或调用 GetLastError得到错误码,以确定具体的错误原因。
我怀疑你已经调用 CoInitialize,并且成功,所以第二次调用会返回失败,告之你 COM 库已经初始化。
额……,我的是wpf程序,能不能告诉我在哪调用getlasterror,还有如何告知com库已经初始化,因为程序不是我写的,我只是在修改,不太了解,不好意思。
@冷水寒冰: 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: 额,谢谢大神。