使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例

转载 2013年12月06日 10:01:18

1.创建一个ATL COM AppWizard工程,如图:

2.  选择 Dynamic link Library (DLL),其它两个请百度,或参照其它文档。如下图:

3. 添加一个自己的COM类,用于导出需要用到的接口。步骤如下:

选择类视图->右键工程->新建类(New Class) 如下图:

弹出对话框后,选择 ATL CLASS,输入类名,如下图:

然后,在类视图中,你会看到:

多了一个接口和一个类,这都是你刚才添加的。

4. 添加导出接口。

右键 "IHelloWorld"->AddMethod,如下图:

弹出对话框,填写函数名及参数即可,如下图:

然后,我们再看 IHelloWord, 如下图:

接口已经有了,而且它已经自动在  CHellowWorld 类中加了实现代码,双击这个上图中的选中的Show就会跳转到定义,如下图:

作为示例,我们弹出一个消息框好了,代码如下:

STDMETHODIMP CHellowWorld::Show(int iWhat)
{
    // TODO: Add your implementation code here
    TCHAR szMsg [512] = {0};
    sprintf(szMsg, "Hello World - iWhat:%d", iWhat);
    MessageBox (NULL, szMsg, "First Com Project", MB_OK | MB_TOPMOST);
    return S_OK;
}

 

到这里,我们编译生成一下。

5. 注册COM组件,可以使用命令行进行注册,regsrv32 xxx.dll,不过为了方便,我们不准备使用手工,我们可以在链接完成后直接注册,设置工程,设置如下:

6.编写调用例程。

创建一个控制台项目,项目源码如下:

复制代码
#include "stdafx.h"
#include "../ComDemo.h"
#include "../ComDemo_i.c"

int main(int argc, char* argv[])
{
    CoInitialize(NULL);
    IHellowWorld* pHello = NULL;
    IUnknown * pUnk = NULL;
    HRESULT hr;
    //(2)创建实例对象,获取IUnknown接口指针
    hr = ::CoCreateInstance(
        CLSID_HellowWorld,
        NULL,
        CLSCTX_INPROC_SERVER,    // 以进程内组件 DLL 方式加载
        IID_IUnknown,            // 想取得 IUnknown 接口指针
        (LPVOID *) &pUnk);
    if( FAILED( hr ) )  
    {
        printf("没注册吧\n");
        return -1;
    }
    
    hr=pUnk->QueryInterface(IID_IHellowWorld,(LPVOID *)&pHello);
    if (FAILED (hr)) {
        printf("QueryInterface hello2 失败\n");
        return -1;
    }
    pHello->Show (2);
    CoUninitialize();
    return 0;
}
复制代码

其中的 ComDemo.h 和 ComDemo_i.c,请看一下COM组件的文件视图,截图如下:

然后运行一下就可以看到效果了。

 

参考资料:

http://hi.baidu.com/laocui172/item/c0bac2ab45e35f9e151073ae

http://xulin.blog.51cto.com/264387/84852

COM组件开发的小心得

1.用MIDL语言在.idl中定义结构:typedef struct { unsigned short  code1; unsigned short code2; unsigned short cod...
  • dawang2006
  • dawang2006
  • 2005年08月26日 10:47
  • 1238

vc中调用Com组件的五种方法详解

vc中调用Com组件的方法详解 转载自:http://www.cppblog.com/woaidongmao/archive/2011/01/10/138250.html 需求: 1.创建myC...
  • blacet
  • blacet
  • 2016年02月19日 10:38
  • 3679

VC调用C#的COM组件(DLL)

假设要进行二次开发的程序为 A.exe,要增加的功能使用增加DLL的方法来完成,设为Cdll.DLL,其中含有A、B、C等方法。       其中的方法A要用到C#类库Csharp.DLL中的方法A。...
  • zhangjs0322
  • zhangjs0322
  • 2011年01月04日 10:02
  • 2048

COM/DCOM开发练习之进程外组件实例

1)使用C++语言实现进程外组件,组建提供加、减、乘、除、判断是否素数等计算服务;客户端部分包括录入和查询部分。 2)在VC++环境上利用ATL向导进行开发。 2.进程外组件   服务器端:   创...
  • qipanliming
  • qipanliming
  • 2012年04月14日 09:57
  • 2592

COM组件开发(五)——使用MFC开发COM组件

使用MFC创建一个进程内组件           这里使用的VS2008,新建一个MFC DLL项目,项目名称为“MFCCOM”,点击“确定”后进入MFC DLL向导,如下图所示:    ...
  • q5806622
  • q5806622
  • 2015年02月26日 17:21
  • 3186

用c++实现com组件示例

 1、 创建一个win32  dll应用类型项目工程。2、  添加ComTest.h及ComTest.cpp文件,并在ComTest.h头文件包含Unknwn.h头文件3、  用guid.exe生成一...
  • wxtsmart
  • wxtsmart
  • 2008年09月27日 16:35
  • 5304

COM组件学习笔记--COM组件示例

COM组件示例
  • Deadwalk
  • Deadwalk
  • 2015年03月13日 20:01
  • 1550

C++ COM组件编写初探

最近在学习COM,自己实现了一个小Demo,拿出来和大家分享一下。求各种批评。 我实现的这个组件向外提供了一个接口ICompTest,里面只有一个函数helloworld(),功能为返回一个整数...
  • shejiannan
  • shejiannan
  • 2014年05月20日 17:41
  • 919

c++到com组件过度(一个实例)

从C++过度到com需要经历的过程: 实现接口的引用计数 对象允许多个接口 类厂对象使用标准IClassFactory接口使用_stdcall调用约定实现DLL动态卸载实现对象自注册...
  • cherry_ermao
  • cherry_ermao
  • 2016年09月20日 11:34
  • 1550

一个最简单的com组件的例子(C++)

一个最简单的com组件的例子:)定义了两个纯抽象基类Ix,Iy来做为组件的接口,然后定义组件CA来继承这两个接口,做为CA的多接口实现,然后在一个客户端显示了对此组件多接口的调用。#include#i...
  • ugvihc
  • ugvihc
  • 2005年10月26日 16:05
  • 2830
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用VC6.0开发COM组件 - 傻瓜式,不讲理论,只讲实例
举报原因:
原因补充:

(最多只允许输入30个字)