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
分享到:
相关推荐
实例程序VC6.0 -----------DAO实例程序
工程中会用到的一些实例资料库(不定期添加) VC6.0编程实例--001:启动界面
工程中会用到的一些实例资料库(不定期添加) VC6.0编程实例--003: 获取系统硬件信息
工程中会用到的一些实例资料库(不定期添加) VC6.0编程实例--002: 具有TabCtrl类似功能的视图类
VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手VC6.0助手
01__VC6.0上机指导---编写简单的C语言程序
vc6.0可运行uCOS-II
vc6.0代码---获取美股实时行情----阿里巴巴-------加入每列实时行情数据说明 vc6.0代码---获取美股实时行情----阿里巴巴-------加入每列实时行情数据说明 vc6.0代码---获取美股实时行情----阿里巴巴-------加入每列...
一款使用VC6.0或VS2005-2012开发必备的工具Visual assist x(破解版)。永久破解。不反弹,哈哈。本人就是使用这个
VC6.0上机指导---编写简单的C语言程序
使用vc6.0制作的简单的人事考勤项目,需要连接数据库sql server2008
修改显示框宽度较长-----VC6.0 读取网上文件---.rar
VC6.0下编译通过的ucos-II源代码 使用VC2005编译时会出错 若使用VC2005及以上版本时请下载 http://download.csdn.net/source/2218411
基于vc6.0的windows程序设计--坦克大战,能够简要地实现基础的功能,一共有五道关卡,时间有限,所以游戏做的很简单,有需要的自取。
01 VC6.0上机指导--编写简单的C语言程序.doc
策略为王源代码无删减版本------vc++6.0-------可以升级到vc2024-----64位---- 策略为王源代码无删减版本------vc++6.0-------可以升级到vc2024-----64位---- 策略为王源代码无删减版本------vc++6.0-------可以升级...
涉及双缓冲和连连看算法....vc6.0实现
Matlab6.5与VC++6.0混合编实例- VC计 Matlab6.5与VC++6.0混合编实例- VC计
vc6.0---股票客户端源代码. vc6.0---股票客户端源代码.