VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 332|回复: 5

[已解决]关于CoInitializeEx的疑问

[复制链接]
99_avatar_middle
最佳答案
1 
online_vip 发表于 2020-2-25 15:38:47 | 显示全部楼层 |阅读模式
本帖最后由 风度猫 于 2020-2-25 15:40 编辑

第一个问题
  1. CoInitializeEx(NULL, COINIT_MULTITHREADED);
复制代码

构造函数里这样写,编译正常
就会提示
onecore\com\combase\objact\objact.cxx(836)\combase.dll!771CAE4C: (caller: 771C9E1B) ReturnHr(1) tid(7ab4) 800401F0 尚未调用 CoInitialize。
但是还能运行完.请求压正常,很奇怪.去掉Ex 用CoInitialize  就不提示
第二个问题
CoInitializeEx 是不是不用CoUninitialize函数 释放?
最佳答案
51_avatar_small
2020-2-25 16:03:48
那调用完 CoInitializeEx 之后,组件的实用是否正常?
如果正常就没问题

CoUninitialize 可以释放 CoUninitialize 的




上一篇:请教SYC一个问题。
下一篇:求教两道C++题,谢谢!
51_avatar_middle
最佳答案
82 
online_admins 发表于 2020-2-25 16:03:48 | 显示全部楼层    本楼为最佳答案   
bestAnswer
那调用完 CoInitializeEx 之后,组件的实用是否正常?
如果正常就没问题

CoUninitialize 可以释放 CoUninitialize 的
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-2-25 16:06:53 | 显示全部楼层
HRESULT CoInitialize(
_In_opt_ LPVOID pvReserved
);
参数被保留,且必须为NULL。语法
建议判断一下返回值
S_OK : 该线程中COM库初始化成功
S_FALSE: 该线程中COM库已经被初始化 CoInitialize () 标明以单线程方式创建。
使用 CoInitialize 创建可以使对象直接与线程连接,得到最高的性能。
CoInitialize并不装载COM 库,它只用来初始化当前线程使用什么样的套件。使用这个函数后,线程就和一个套件建立了对应关系。线程的套件模式决定了该线程如何调用COM对象,是否需要列集等。
CoInitialize ()并不会干扰客户和服务器之间的通信,它所做的事情是让线程注册一个套件,而线程运行过程中必然在此套件。
CoInitialize和CoUninitialize必须成对使用。


个线程必须调用 CoUninitialize 一次在每次成功调用CoInitialize或CoInitializeEx。只有CoUninitialize对应于CoInitialize调用对应CoInitialize或CoInitializeEx调用他们初始化库能关闭它。
调用OleInitialize必须通过调用OleUninitialize平衡。OleUninitialize 函数调用的OleUninitialize内部,所以应用程序调用OleUninitialize不也需要调用CoUninitialize。
CoUninitialize应该在应用程序关闭后调用,作为最后一次调用COM库在应用程序主窗户隐藏,消息循环结束之后。如果有剩余的对话开着,CoUninitialize开始了模态消息循环和派发任何挂起的消息在容器或服务器里对于这个COM应用程序。通过派发信息,CoUninitialize 在确保应用程序等待所有它的消息接收之前不退出。Non-COM信息被丢弃。
因为没有办法控制顺序进程内服务器加载或卸载, 从DllMain函数中调用CoInitialize, CoInitializeEx,或者 CoUninitialize 是不安全的。
99_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2020-2-25 16:13:48 | 显示全部楼层
wl1383838438 发表于 2020-2-25 16:06
HRESULT CoInitialize(
_In_opt_ LPVOID pvReserved
);

哥哥 能回答点不是百度能搜到的不,哈哈  能搜到的 还有必要来着提问嘛
99_avatar_middle
最佳答案
1 
ico_lz  楼主| 发表于 2020-2-25 16:15:13 | 显示全部楼层
Syc 发表于 2020-2-25 16:03
那调用完 CoInitializeEx 之后,组件的实用是否正常?
如果正常就没问题

你的意思  CoInitializeEx会自动使用CoUninitialize  进行释放 不需要自己在调用?
另外  结果正常,就是有那个提示.
51_avatar_middle
最佳答案
82 
online_admins 发表于 2020-2-25 16:32:45 | 显示全部楼层
风度猫 发表于 2020-2-25 16:15
你的意思  CoInitializeEx会自动使用CoUninitialize  进行释放 不需要自己在调用?
另外  结果正常,就是 ...

需要自己调用的!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-29 14:51

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表