DLL中无法执行CoInitializeEx.
在Exe中某函数有如下语句:
HRESULT hres=CoInitializeEx(0,COINIT_MULTITHREADED) 可以顺利执行初始化。
但是将此函数移植到DLL中后,在VB中调用这个DLL某函数时。CoInitializeEx 会初始化失败。
问题点数:20、回复次数:7Top
1 楼lrest()回复于 2006-05-04 09:37:04 得分 0
在DLL中将 CoInitializeEx 改成 hres=CoInitializeEx(0,COINIT_APARTMENTTHREADED);
就可以Success了。但是
hres=CoInitializeSecurity(
NULL,-1,NULL,NULL,RPC_C_AUTHN_LEVEL_CONNECT,
RPC_C_IMP_LEVEL_IDENTIFY,NULL, EOAC_NONE, 0);
hres返回又失败了。Top
2 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-05-04 11:52:14 得分 18
你不应该在DLL中初始化COM。
COM的初始化是以线程为单位的。通常你应该让调用DLL的应用程序来初始化COM以避免冲突。Top
3 楼lrest()回复于 2006-05-04 16:14:27 得分 0
若是让调用DLL的应用程序来初始化Com,这样子弄也太不方便了吧。没见过有这么麻烦的DLL啊。我的DLL功能是想在VC下通过wmi返回硬件的相关信息供其他应用程序引用,所以才要用到CoInitializeEx,CoInitializeSecurity等函数的。Top
4 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-05-05 00:47:37 得分 0
你的DLL自动初始化COM的话,会使得应用程序不能使用一些不同套间的COM组件Top
5 楼buggycode(风雨寒夜)回复于 2006-05-05 07:16:57 得分 2
从MSDN看你的问题是要检查返回值并且处理它。(没有试验过)Top
6 楼lrest()回复于 2006-05-05 19:41:15 得分 0
难道在VC6.0的环境下,若不想在调用的应用程序处初始化COM,访问wmi就没撤了.......
郁闷.....。高手们都支支招啊.....。我是实在不想在应用程序处初始化COM的。Top
7 楼lrest()回复于 2006-05-06 11:14:52 得分 0
好象是解决了,我省掉了CoInitializeSecurity这个函数,跳过它直接调用wmi了。编译后测试通过。Top




