• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 再问:关于使用CoInitializeEx()函数?

再问:关于使用CoInitializeEx()函数?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了coinitializeex,sumif函数的使用方法,lookup函数的使用方法,index函数的使用方法,match函数的使用方法等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 再问:关于使用CoInitializeEx()函数?
描述:

非常感谢各位的帮助,编译时找不到CoInitializeEx()的定义的问题已经解决。但在运行的过程中我又遇到了这样的问题:
现在的情况是:在同一个DLL中实现了A,B,C,D四个COM组件,其中,A的一些方法中会调用B,C,D三个组件;A的一个方法中会生成一个新的线程ThreadT,这个线程要求与A的各方法同时调用B,C,D三个组件。
有一个单线程的EXE会调用到A,B,C,D四个组件.
这个EXE在运行中会调用A的那个方法,生成线程ThreadT。这样,在这个EXE的运行过程中,就会要求EXE本身,组件A的一些方法,以及线程ThreadT能够同时访问B,C,D三个组件。
现在的问题是:应该在哪里使用CoInitializeEx(),使用哪个参数呢?
已经做过的试验:
1、在DLL的InitInstance()函数中和线程ThreadT的主函数中调用CoInitializeEx()函数,都使用 COINIT_MULTITHREADED 参数,结果是:前者返回RPC_E_CHANGED_MODE ,后者返回 S_OK 。
2、在DLL的InitInstance()函数中和线程ThreadT的主函数中调用CoInitializeEx()函数,都使用 COINIT_APARTMENTTHREADED 参数,结果是:前者返回S_FALSE ,后者返回 S_OK 。
现在看来,在DLL的app对象初始化之前,CoInitializeEx()已经被调用过了,使用COINIT_APARTMENTTHREADED 函数。我的疑惑在于:为什么在ThreadT中调用CoInitializeEx()时,为什么没有检测到已经存在的套间,却返回S_OK呢?
肯请大虾指点!!!!!!!
现在程序的时间反正也延误了,干脆慢慢找解决办法吧,呵呵。


解决方案1:


太复杂了,简直象在讲绕口令。
我的建议,把A,B,C,D放在不同的DLL中分别实现。
为了能够让多线程访问一个OCX,建议ABCD每个组件中都没有全局变量或者静态变量。
不要让组件创建一个线程供EXE使用,否则你设计的这个组件简直是白忙活。因为很多语言中并没有显式的线程的概念。线程并不是IDL的一个部分。
如果要那样做,把这个线程写成C++的动态库好了。

解决方案2:

IMarshal

解决方案3:

每个要调用COM组件的线程都必须调用!只要在调用前调用就行了


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 咋回事?使用CoInitializeEx函数,总是编译通不过,提示没找到该函数
  • 在MFC中调用CoInitializeEx出错,郁闷中,达人快来帮忙~~~~
  • CoInitializeEx在哪里定义的?要包含哪个头文件??
  • CoInitializeEx函数引起的问题
  • 多次调用CoInitialize没有什么问题吧?
  • CoInitializeEx的使用问题
  • 为什么MFCDLL中调用CoInitialize()总是返回失败?
  • 为什么我没用头文件也可以使用CoInitialize在线等
  • 如何知道组建已经初始化CoInitialize
  • Atl工程中提示尚未调用coinitialize

相关文章

  • 2017-06-05 这样能用进程控制么???
  • 2017-06-04 FLL链接库怎样写?
  • 2017-06-04 关于导出一个组件的接口,以及接口的方法
  • 2017-06-04 VC里怎样在ActiveX里放标准控件?
  • 2017-06-05 多线程的问题
  • 2017-06-05 求助:ReadProcessMemory调用失败
  • 2017-06-05 怎样把正在运行的IE的一个插件(dll文件)卸出IE的进程空间,即可以删除这个dll文件
  • 2017-06-04 QueryInterface的2义性问题!
  • 2017-06-04 求问:为什么同一COM组件不同进程queryinterface返回相同值?
  • 2017-06-05 拦截API!你玩过没有!

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • wtl中如何添加自定义消息,请高手指点
    • 我怎么做一个DLL让VB可以使用里面的类?
    • 控件和服务器的通信问题
    • 跪求一线程池例子高手指点
    • 如何判断程序已经启动过了?
    • ADO技术实现的监控系统数据库编程
    • 调用exe组件
    • 请教:ADO组件在关闭结果集时出现不允许操作的错误!急用,拜托
    • COM中tlb文件的使用
    • 用了socket的线程和主线程共同使用一块缓冲区,是否有冲突?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有