• 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

佚名通过本文主要向大家介绍了吉他初学者常见问题,对初学者的教诲,健美操练视频初学者,初学者,吉他教学视频初学者等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 初学者对com的问题
描述:

看了 《com技术内幕》 理论是有了点,但却不知道如何下手自己写一个。。。
书上的前面几章例子是由dll实现的,我想用dll写一个简单的com,我用的是vs2005
可是,我应该建立一个什么项目呢?
我现在建了一个MFC DLL。不过它自己生成的时候里面就已经存在了一个类,如下:


BEGIN_MESSAGE_MAP(CfirstComApp, CWinApp)
END_MESSAGE_MAP()
// CfirstComApp 构造
CfirstComApp::CfirstComApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CfirstComApp 对象
CfirstComApp theApp;
// CfirstComApp 初始化
BOOL CfirstComApp::InitInstance()
{
CWinApp::InitInstance();
return TRUE;
}

我不知道这个是干什么用的。。。
到底应该创建一个什么项目呢?这个MFC DLL又是干什么用的啊,里面的自动生成的东西又是干什么用的啊?
是因为我的书太老了吧,很东西好像都不一样了,不能按书的步骤来了。很迷糊啊`~~


解决方案1:

唉,现在出书的通病,一上来就是 inside internal的大部头,想当年偶也是还不知道COM怎么用就先把原理研究了一溜够,恨不得自己都觉得能用汇编码个COM了还不知道怎么自动化,就没人学老外出几本cookbook的,大概是东西太少写不了多厚不咋滴赚钱吧 吼吼
进VC,生成ATL项目,不管那么多先默认了吧,记得把支持com1.0和注册选上,然后,添加类(选择简单ATL对象),程序会自动生成一个接口类和实现这个接口的实体类,如果要添加方法,在接口上右击(实体类里面会多相应的函数代码),如果要添内部函数,在实体类上右击。编译完了也就自动注册了
怎么用?只说VC的
建立一个新项目,include完了后写
#import "刚才生成的dll的地址" no_namespace
先编译下,在生成目录里面去找一个.tlh的文件,声明全在里面,下面有用
然后在函数中(只讲智能指针的)
{
    ::CoInitialize(NULL);
    try{
        I接口名Ptr = p随便起(__uuidof(实体类名));在tlh中找,一定要一致
         p随便起->方法();
    }
    catch(_com_error e){
        ……
    }
    ::CoUninitialize();
}
记得try catch一定要有
如果真的是超级新手的话,建议一上来先把上面这个玩转了再说吧,比生成和使用dll还方便。
等需要研究远调和同步什么什么的的时候在看大部头不迟。
个人观点,COM这玩意弄出来是服务于俺们的不是折磨俺们的。

解决方案2:

借助MFC或者ATL可以免去你编写往注册表写如信息的代码和
编写那几个几乎是一成不边的导出函数。

解决方案3:

哎 其实直接使用C++编写一个普通的DLL
在这个DLL中你导出DllGetClassObject
DllCanUnloadNow,DllRegister,DllUnRegister函数就可以了呀
然后你在运行进入cmd,然后使用rgsvr32 xxx.dll就可以在组册表中写入组件的信息了
通过调用CoCreateInstance函数传递进你的组件CLSID就可以使用这个组件了。

解决方案4:

引用楼主 zjfhgdx 的回复:
看了 《com技术内幕》 理论是有了点,但却不知道如何下手自己写一个。。。
书上的前面几章例子是由dll实现的,我想用dll写一个简单的com,我用的是vs2005
可是,我应该建立一个什么项目呢?
我现在建了一个MFC DLL。不过它自己生成的时候里面就已经存在了一个类,如下:
C/C++ code
BEGIN_MESSAGE_MAP(CfirstComApp, C……

创建ATL Project。
MFC DLL不一定就是COM
或者干脆就win32 project吧。

解决方案5:

支持楼上

解决方案6:

开发com使用atl才是正道,建议看看《atl internals》

解决方案7:

这是一个教程的网址,我照着做过,可以实现vb底下调用该控件的 
http://blog.donews.com/crazyworm/archive/2004/12/16/204221.aspx

解决方案8:

你参考一下msdn的一篇教程啊,是写atl的控件吗?

解决方案9:

学COM就看ATL吧,基于模板的


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

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

  • 200分相送,帮顶也有分,初学者问题
  • 200分相送,帮顶也有分,初学者问题
  • 初学者问题,请大家进来!!!
  • 初学ActiveXocx问题(MFC)
  • 初学ATLCOM的问题
  • 初学者:关于ActiveX控件问题
  • 初学者的问题:关于线程,急!
  • 初学者问题!!
  • 初学者关于线程的编程问题
  • 初学者:关于DLL的小问题

相关文章

  • 2017-06-05 安装程序无法创建一个DCOM用户帐号来注册!
  • 2017-06-04 请问mfc作activedocumentcontainer时,各个接口都是哪个类实现的呀?
  • 2017-06-05 本人对多线程编程的一点总结,与大家探讨
  • 2017-06-04 VC视图中显示微软DsoFramer控件视图重绘不正常
  • 2017-06-04 请问在win32sdk环境下如何引用自编的Active控件呀?
  • 2017-06-04 如何向另一个程序中的文本框写入内容
  • 2017-06-05 vc创建word文档,如何获取word框架口句柄?
  • 2017-06-05 关于updatedata的应用
  • 2017-06-04 如何确保一个对象在一台计算机上只有一个实例在运行?
  • 2017-06-04 送分问题,MFC的ActiveX控件如何定义常量,如#defineflag2

文章分类

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

最近更新的内容

    • 请问一个进程里面最多能起多少个线程?
    • 产生了一个工作线程进行计算,但是在工作线程计算的时候“主线程(程序)”不响应我的任何消息,请问为什么?
    • 一个菜鸟的关于写VOX文件转换为WAV文件组件的问题(能给点提示的都有分!)
    • 在设置进程优先级时如何使用ABOVE_NORMAL_PRIORITY_CLASS优先级,MSDN中没有该优先级。
    • 请教,如何打cab包,还有能否象winrar自解压那样,在安装完active以后,自动运行一个应用程序?
    • IEToolBar问题
    • MkParseDisplayName到底干了什么???
    • 各位大哥。请问一个问题。关于接口重载
    • 关于释放资源的问题
    • ActiveX工程使用IWebBrowser2指针需要导入那个库

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

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