关于调用dll时COM初始化的问题

DwyaneCV 2013-12-09 01:27:34
我做了个excel的MFC扩展dll,另外编了一个主程序来调用它,我就想问,我有的人在dll中利用CoInitialize来初始化COM,那么能不能不在dll中初始化,而在主程序中去初始化。

我是这么做的,在主程序中的C***App类中的InitInstance中去初始化,这样对不对?是不是一定要在dll中初始化啊?
...全文
287 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaoyi098 2013-12-12
  • 打赏
  • 举报
回复
引用 6 楼 dwyaneyywade 的回复:
[quote=引用 5 楼 yaoyi098 的回复:] 只要保证在线程中,调COM之前CoInitialize初始化就好,放在哪里都是可以的,但还是建议你放在你的dll中。 不要怕重复调用影响效率,仅仅是增加引用计数而已。 MSDN上提示:不要在DLLMAIN函数中调用CoInitialize和CoUninitialize。
但是在dll中初始化,就不能重复初始化,因为你每调用一次dll,就会去初始化一次,并且用MFC做的扩展dll,没有C***App类,也就没有Initilntance来提供初始化的位置啊[/quote] 在你自己实现的类的构造与析构中,初始化
DwyaneCV 2013-12-11
  • 打赏
  • 举报
回复
引用 4 楼 lijianli9 的回复:
CoInitialize初始化需要在每个使用com的线程中初始化,最好在dll中。
但是在dll中初始化,就不能重复初始化,因为你每调用一次dll,就会去初始化一次,并且用MFC做的扩展dll,没有C***App类,也就没有Initilntance来提供初始化的位置啊
DwyaneCV 2013-12-11
  • 打赏
  • 举报
回复
引用 5 楼 yaoyi098 的回复:
只要保证在线程中,调COM之前CoInitialize初始化就好,放在哪里都是可以的,但还是建议你放在你的dll中。 不要怕重复调用影响效率,仅仅是增加引用计数而已。 MSDN上提示:不要在DLLMAIN函数中调用CoInitialize和CoUninitialize。
但是在dll中初始化,就不能重复初始化,因为你每调用一次dll,就会去初始化一次,并且用MFC做的扩展dll,没有C***App类,也就没有Initilntance来提供初始化的位置啊
yaoyi098 2013-12-10
  • 打赏
  • 举报
回复
只要保证在线程中,调COM之前CoInitialize初始化就好,放在哪里都是可以的,但还是建议你放在你的dll中。 不要怕重复调用影响效率,仅仅是增加引用计数而已。 MSDN上提示:不要在DLLMAIN函数中调用CoInitialize和CoUninitialize。
lijianli9 2013-12-10
  • 打赏
  • 举报
回复
CoInitialize初始化需要在每个使用com的线程中初始化,最好在dll中。
许文君 2013-12-09
  • 打赏
  • 举报
回复
引用 2 楼 dwyaneyywade 的回复:
[quote=引用 1 楼 xuddk727 的回复:] 最好还是调用COM的一方自己去初始化(你这里是DLL),就像内存一样,自己new自己delete,导出的仅是指针
你的意思是对于调用dll的程序,可以在主程序中用CoInitialize来初始化COM吗?[/quote]可以
DwyaneCV 2013-12-09
  • 打赏
  • 举报
回复
引用 1 楼 xuddk727 的回复:
最好还是调用COM的一方自己去初始化(你这里是DLL),就像内存一样,自己new自己delete,导出的仅是指针
你的意思是对于调用dll的程序,可以在主程序中用CoInitialize来初始化COM吗?
许文君 2013-12-09
  • 打赏
  • 举报
回复
最好还是调用COM的一方自己去初始化(你这里是DLL),就像内存一样,自己new自己delete,导出的仅是指针

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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