天天看点

vs2005 开发 COM--第一个程序

开发环境--vs2005

一、新建一个atl工程:

选择ATL项目,

vs2005 开发 COM--第一个程序

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

vs2005 开发 COM--第一个程序

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

vs2005 开发 COM--第一个程序

第二步:

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

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

vs2005 开发 COM--第一个程序
vs2005 开发 COM--第一个程序
vs2005 开发 COM--第一个程序

第三:

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

vs2005 开发 COM--第一个程序

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

第四步:

我们来到这个文件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包含进来。

// 我之所以将它拷进来,是想更清楚地展示这些敞亮来自什么地方一击它们的代码

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

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