• 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 > 一个COM基本问题

一个COM基本问题

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

佚名通过本文主要向大家介绍了com 检查失败问题,dr.com问题,dr.com常见问题,com问题,电脑只有一个com口等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 一个COM基本问题
描述:

我自己写一个dll程序,然而我的这个dll又要用到其他的dll(比如说msado15.dll)
在我的dll中要不要调用CoInitialize(NULL)函数。


解决方案1:


CoInitialize并不装载com库,这个函数只是用来初始化当前线程使用什么样的套间。当使用这个函数以后,线程就和一个套间建立了对应关系。
线程的套间模式决定了该线程如何调用com对象,是否需要列集等
你可以看一下有关列集的资料,使用不同套间之间对象接口是通过列集来完成的。关于列集的实现,很多书上都有较详细的说明。
CoInitialize()并不会干扰客户和服务之间的通信,套所作的事情只是让线程注册一个套间,而线程运行过程中就必然在此套间中,就象我们每个活着的人,都一定属于某个国家一样。
需要强调的是,套间是com中用来解决并发调用冲突的很有效的办法
 

解决方案2:

需要,每一个动态库都需要调用这个函数。你可以看看你在新建动态库得时候VC自动为你创建得DLLMain函数。
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
// Remove this if you use lpReserved
UNREFERENCED_PARAMETER(lpReserved);
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("YPGISPRINTDLL.DLL Initializing!\n");
CoInitialize(NULL);
// Extension DLL one-time initialization
if (!AfxInitExtensionModule(YpgisPrintDLLDLL, hInstance))
return 0;
// Insert this DLL into the resource chain
// NOTE: If this Extension DLL is being implicitly linked to by
//  an MFC Regular DLL (such as an ActiveX Control)
//  instead of an MFC application, then you will want to
//  remove this line from DllMain and put it in a separate
//  function exported from this Extension DLL.  The Regular DLL
//  that uses this Extension DLL should then explicitly call that
//  function to initialize this Extension DLL.  Otherwise,
//  the CDynLinkLibrary object will not be attached to the
//  Regular DLL's resource chain, and serious problems will
//  result.
new CDynLinkLibrary(YpgisPrintDLLDLL);
}
else if (dwReason == DLL_PROCESS_DETACH)
{
TRACE0("YPGISPRINTDLL.DLL Terminating!\n");
// Terminate the library before destructors are called
AfxTermExtensionModule(YpgisPrintDLLDLL);
CoUninitialize();
}
return 1;   // ok
}


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

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

  • COM问题,帮我看看
  • 初次使用COM,有编译链接问题请大家帮忙。
  • com的注册问题
  • 关于COM问题
  • COM注册失败问题
  • 修改COM属性问题
  • 关于COM的参数类型问题
  • 用COM的问题
  • 几个COM的问题,头疼中
  • COM事件,多线程问题?

相关文章

  • 2017-06-05 高手请进,文件多线程断点续传CPU占用率很高
  • 2017-06-04 接口下定义的方法,[out]型参数在编译时出错,怎么解决?
  • 2017-06-04 100分------------请教一下数字签名的问题
  • 2017-06-04 atltypesh做什么的,谁能介绍下
  • 2017-06-05 多线程,如何通知主线通已执行完。
  • 2017-06-05 怎样让我的程序占用一定比率的CPU时间?(跪求高手指点)
  • 2017-06-04 使用CButtonST类,给按钮添加BMP图片,鼠标移动到按钮,会闪烁,为什么
  • 2017-06-04 关于vc串口通信的问题,急!
  • 2017-06-04 奇怪,CComObjectRootEx定义两次
  • 2017-06-04 模式匹配函数作用

文章分类

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

最近更新的内容

    • vc2008调用matlab的m文件
    • 如何等待循环创建的好几个线程结束
    • 请问怎么在一般的网页上画一条线?
    • 初学者提问!1、在MFCActiveX中如何&在哪里添加方法?2、如何创建一静态窗体!
    • 一个ActivXDll库,应该如何连接使用?
    • 电子地图上显示的gps路线为什么是折线?
    • OCXMFC第三方DLL
    • 谁com+事件是怎么回事,可不可以我Fire一个事件,所有订阅的组件都可以收到事件?类似组播方式
    • 关于Dumpbin问题不能运行的问题
    • 恭请高手近来看看,有关窗口倥件,谢谢!!!!!!!!!

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

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