当前位置:   article > 正文

COM连接点在多线程中使用的注意事项

COM连接点在多线程中使用的注意事项

   用vc 写了个支持连接点的COM程序(dll),该COM程序为多线程,其中一个工作线程在任务完成后会通过连接点发送事件实现回调。关于如何写支持连接点的COM程序,请参考vc知识库的杨老师专栏的这篇文章:http://www.vckbase.com/document/viewdoc/?id=1538,杨老师关于COM开发与应用的文章都很不错,值得一看!

    该COM dll写好后,用vb程序调用,并写好事件回调的函数:

 

    结果在运行时总是抛异常,回调函数不能正常被调用。后来google才知道这是多线程的问题,微软曾针对这个问题专门提供了解决方案,请看这篇文章:http://support.microsoft.com/kb/280512。在写COM代码时,将IDE自己生成的连接点基类中的IConnectionPointImpl改为IConnectionPointImplMT(定义在微软提供的头文件ATLCPImplMT.h中),并按文章所述修改相关代码。特别要注意的是在工作线程(执行回调函数的线程)中初始化COM时一定要调用CoInitializeEx(NULL, COINIT_MULTITHREADED),否则回调函数还是无法正确执行的。修改后,vb中的objCom_OperationDone就能被正确调用了。

 

    注意:要VB调用时才需要这么改,如果在VC中调用,这么修改反而会出现异常。如果是供C#调用,改与不改都能正常调用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/114434
推荐阅读
相关标签
  

闽ICP备14008679号