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

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

我是这么做的,在主程序中的C***App类中的InitInstance中去初始化,这样对不对?是不是一定要在dll中初始化啊?
...全文
140 点赞 收藏 8
写回复
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,导出的仅是指针
回复
发动态
发帖子
进程/线程/DLL
创建于2007-09-28

1.5w+

社区成员

VC/MFC 进程/线程/DLL
申请成为版主
社区公告
暂无公告