现在的位置: 首页 > 综合 > 正文

vs2005 开发 COM--第一个程序

2012年02月08日 ⁄ 综合 ⁄ 共 1451字 ⁄ 字号 评论关闭

开发环境--vs2005

一、新建一个atl工程:

选择ATL项目,

 

点击完成,就是一个属性的设置项目,保持默认属性,再点击完成:

就可以看见有这么几个类,如图:

第二步:

项目菜单,添加新类,弹出一个对话框,出现一个如下:

并且分别输入类名,和进行相应的设置!

第三:

在类视图里面给IFirst_ATL接口添加一个方法AddNumbers(),如图:

不用下一步,直接完成就是了。

第四步:

我们来到这个文件First_ATL.cpp,添加如下内容:

*ReturnVal = Num1 + Num2;

也就是在如下函数里面:

STDMETHODIMP CFirst_ATL::AddNumbers(LONG Num1, LONG Num2, LONG* Returnval)
{
 // TODO: 在此添加实现代码
 *ReturnVal = Num1 + Num2;
 return S_OK;
}

可以了,编译一下,通过的话。进入下一步,写测试程序:

第五步:写测试程序:

关闭当前工程。新建一个win32控制台的程序,内容如下:

#include "stdafx.h"
#include <iostream>
using namespace std;

#include "../../simple_ATL/simple_ATL/simple_ATL.h"
#include "../../simple_ATL/Simple_ATL/Simple_ATL_i.c"
// 从Simple_ATL 工程所在目录的Simple_ATL_i.c 文件中拷贝以下内容
// 注意: 你也可以不拷贝这些东西,而是把文件Simple_ATL_i.c包含进来。
// 我之所以将它拷进来,是想更清楚地展示这些敞亮来自什么地方一击它们的代码
/*
const IID IID_IFirst_ATL =
{0xC8F6E230,0x2672,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};
const CLSID CLSID_First_ATL =
{0x970599E0,0x2673,0x11D3,{0xA8,0xA8,0x00,0x10,0x5A,0xA9,0x43,0xDF}};
*/
void main(void)
{
// 声明HRESULT和Simple_ATL接口指针
HRESULT hr;
IFirst_ATL *IFirstATL = NULL;
// 初始化COM
hr = CoInitialize(0);
// 使用SUCCEEDED 宏并检查我们是否能得到一个接口指针
if(SUCCEEDED(hr))
{
hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER,
IID_IFirst_ATL, (void**) &IFirstATL);
// 如果成功,则调用AddNumbers方法,否则显示相应的出错信息
if(SUCCEEDED(hr))
{
long ReturnValue;
IFirstATL->AddNumbers(5000, 7, &ReturnValue);
cout << "The answer for 5000 + 7 is: " << ReturnValue << endl;
IFirstATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
// 释放COM
CoUninitialize();
}

输出结果:

5007

有一点要注意,包含头文件时候,要么用绝对路径,要么相对路径,但是路径一定要找对!

 

抱歉!评论已关闭.