• 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问题,简单的线性规划问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 有关com的简单问题
描述:

1.请问com库和类厂有什么不同?
2.为什么com库先产生类厂对象,然后再由类厂对象产生com对象,如果直接由com库产生com对象不是更方便吗?
3.在一个实例中看到这样一段程序
extern "C" const GUID CLSID_Dictionary = { 0x54bf6567, 0x1007, 0x11d1,
{ 0xb0, 0xaa, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00} } ;
想知道这个GUID号是系统原有的,必须这么写,还是自己定义的,随便写多少都行?
帮小弟解释一下吧!!


解决方案1:

学习!!!

解决方案2:

1.COM库的概念我不是很清楚,或许是SCM,如果是,它属于操作系统的一部分,用来响应请求来装载DLL的。
  类厂是每个可创建的COM类中必须存在的,如果用类比的话,它类似于MFC中的用RTTI功能的MFC类,在这样的类中会存在一个CRunTimeClass 的静态变量。在ATL的实现中,通过继承CComClass,而在MFC中,是通过用DECLARE_OLECREATE等这样的宏为类加入了一个COleObjectFactory型的静态变量来完成的。
2.COM类是无法欲知,除了它遵从COM的规范外,它与我们在DLL中导出的类不同,我们导出的类是由我们自己来为它分配内存,在堆或者栈上,例如:
 class  __declspec(dllimport) A;
 int main()
 {
    A a;                     //此处对A的实例分配内存
 }
而在COM中类似的情况是这样的。
  int main()
  {
     IA *pA;
     HRESULT hr = CoCreateInstance(CLSID_A,NULL,CLSCTX_ALL,IID_IA,(void **)&pA);
   }
在客户端根本不需要知道类的信息。
这样就要有一个通用的机制,处理一些复杂的,不可预知的问题,例如为实例分配堆栈的大小。直接创建类就要求COM库要了解对象的信息,这是不可能实现的。所以要委托对于每个COM都存在的类厂去做这件事。而所有COM的类厂的是通用的。从而另COM库去使用相对简单的通用的类厂来创建COM。
3 这要看你是COM的开发者还是COM的使用者,如果是COM的开发者可以随便的修改ID,我查过这个接口,我想你应该要使用这个接口,所以ID必须是这个数,否则创建COM不会成功。
 

解决方案3:

楼主的COM库应该是指COM运行时期库(即一些DLL),而类厂是一个COM组件(使用COM的程序员编的),和将被应用的COM组件一起提供,装在一个DLL里。
之所以还要多提供一个类厂这样的机制,因为COM对象不一定非得分配在堆上,也可以分配在栈上。编的好一点的COM组件会根据自己的使用频率而使用不同的内存使用方式。因此类厂只是让COM组件可以自己处理创建的位置,增加内存使用的灵活性。
GUID是系统头文件中预定义了的,是一个struct,上面那样写只是为了方便,也可以通过数据成员赋值的形式。


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

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

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

相关文章

  • 2017-06-04 大家帮忙看看这段代码有什么问题吗?高分!!!
  • 2017-06-04 在shellex下,为上下文菜单添加小图标
  • 2017-06-04 如何判断Excel中的一个sheet已经关闭?
  • 2017-06-05 在写dll中的问题
  • 2017-06-05 如何用vc将Msrdp59lib的静态库转化为java能调用的动态库dll!急用!
  • 2017-06-05 怎样强行结束一个进程并释放它占用地资源
  • 2017-06-04 如何实现全局HTTP请求过滤?有熟悉AsynchronousPluggableProtocol的没?
  • 2017-06-04 在程序中怎样向ie控件中填写东西---在线等待
  • 2017-06-04 我的ActiveX控件为什么不能响应父窗口的Click,MouseMove消息?
  • 2017-06-04 ActiveXDoModal问题?对话框假死?

文章分类

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

最近更新的内容

    • ATL的P/S工程为什么没有实现DllRegisterServer等函数?
    • 怎样将ACTIVEX生成的图形报表,转换成一张JPG图片???
    • win10下如何设置默认浏览器C++
    • 尽到全力只能给这么多了
    • 多线程中使用全局函数,全局变量是否正确
    • windows服务中调用组件为什么老失败?
    • MSHTML的CoCreateInstance失败,请教各位,先谢谢了。
    • 请问dll和atl,com之间的主要区别是什么
    • 高手进,多线程消息队列问题!
    • 如何将ActiveX里的数组以Array的形式通过连接点传给javascript

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

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