CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

DLL中无法执行CoInitializeEx.

楼主lrest()2006-05-03 22:31:43 在 VC/MFC / 进程/线程/DLL 提问

在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

相关问题

关键词

得分解答快速导航

  • 帖主:lrest
  • jiangsheng
  • buggycode

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo