关于在一个程序中使用多个COM的情况

chenshijin 2003-10-21 10:46:26
兄弟我有一个应用程序,用来实现数据库(采用ADO)访问,然后将数据库中的信息通过短信接口(采用COM实现的)发送出去,可是我在启动短信发送线程时,发现不能获取短信发送接口指针,必须在线程中重新初始化一次才可以(hr = ::CoInitialize(NULL);),但是在启动线程之前我已经在主线程中初始化了,为什么还需要再次初始化一次呢?有哪位高手不吝指教!
主要是因为我在发送不成功时,我需要退出线程,我怕调用(hr = ::CoUuinitialize();)会影响另外一个COM智能指针的操作!谢谢!
...全文
35 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylc001 2003-10-24
  • 打赏
  • 举报
回复
学习!
jeffchen 2003-10-24
  • 打赏
  • 举报
回复
如果用CoInitialize()初始化的话,COM的线程模型是Apartment或是SingleThread,因此如果在多线程中直接使用同一个接口指针的话,需要使用使用ConInitializeEx()初始化为FreeThread。否则,需要做接口调度。
另外,在一个线程中使用CoInitialize()和CoUninitialize()是不会影响其他线程的。
panzhaoping 2003-10-24
  • 打赏
  • 举报
回复
我知道了
大哥你要记住,线程一旦初始化,除非处于不可调度状态(搁气来),
不然是不会接受消息的。你一定要在该线程中放入getmessage函数
让他接受消息
zyong310 2003-10-21
  • 打赏
  • 举报
回复
在线程中必须初始化com环境,我看是没什么办法.
honghaozi 2003-10-21
  • 打赏
  • 举报
回复
每个线程都要初始化

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧