提问人:Luchian Grigore 提问时间:7/13/2011 更新时间:7/20/2015 访问量:13180
失败的 CoCreateInstance
Failed CoCreateInstance
问:
我有一个函数,我在其中调用 CoCreateInstance。此函数被多次调用,并且它有效,但是有一次 CoCreateInstance 失败,并出现“错误的变量类型”错误。问题是,无论是成功还是失败,参数总是相同的。是什么原因导致这种情况发生?
答:
我解决了这个问题。 调用是从不同的线程发出的。当调用成功时,它是从主线程调用的。失败时,源线程是其他线程,并且事先未调用 CoInitialize()。 调用 CoInitialize 解决了该问题。
评论
CoCreateInstance()
CoInitialize()
我的代码中还有一个函数调用 CoCreateInstance(...)。当一次它起作用而另一次它不起作用时,无需更改代码。
但是,当查看返回的 HRESULT 时,结果是 Out of Memeory Error,“E_OUTOFMEMORY Runs out of memory”。我确实对这些主题进行了一些研究,并发现了以下可能发生这种情况的原因。
- 您必须首先调用 CoInitialize()
在调用 CoCreateInstance 函数之前,必须调用 CoInitialize 函数
- COM 对象注册不正确
当 COM 对象(或代理存根)未正确注册时,通常会发生这种情况。您可以通过尝试实例化 COM 对象来使用 Oleview 工具检查该对象的注册。
Oleview.exe 包含在 Windows SDK 中,位置通常位于 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin。
如果没有,您可以尝试安装Microsoft适用于 Windows Server 2008 的 Windows SDK:http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en。
注意:它不仅适用于Windows 2008,它只是以最新的Windows版本命名,并且支持Windows Server 2003;Windows 服务器 2008;Windows Vista的;Windows XP中。
- DLL 版本不正确的丢失、损坏
对我来说,这发生在不同的项目配置中,在调试模式下,我发现了异常,但在发布中它没有出现。
下一个:未找到 Java 类异常
评论
DllGetClassObject()
CreateInstance()