环境:
我有一个JNI程序,它由以下部分组成
生成的DLL保存在JDK目录
中的bin文件夹中问题:当我运行程序时,我在C ++程序中收到错误消息,其中CoInitializeEx失败,错误代码为0x80010106。
以下是程序失败的行。
hres = CoInitializeEx(0,COINIT_MULTITHREADED)。
我尝试增加heapSize仍然继续失败。
CoInitializeEx失败的任何特殊原因?
提前致谢
答案 0 :(得分:3)
错误0x80010106表示“HRESULT - 0x80010106 - 设置后无法更改线程模式。”
问题基本上是线程只能初始化其COM模式(和单元类型,STA / MTA)一次。设置后,如果尝试使用其他值重新初始化,则会出现此错误。
这个错误经常发生的是,其他一些第三方代码会导致COM在代码执行之前被初始化。如果是这种情况,那么您有几个选择:
1)尝试找到一种方法让您的代码先执行,这样您就可以自己设置COM单元类型。这可能很棘手,如果第三方代码需要STA
,可能会导致副作用2)将您的代码放在自己的线程上,您可以在其中明确设置公寓类型
如果您实际上不关心公寓类型,那么您只需将对CoInitializeEx的调用更改为使用COINIT_APARTMENTTHREADED(STA)而不是COINIT_MULTITHREADED(MTA)。
希望有所帮助,
约翰