开发环境--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
有一点要注意,包含头文件时候,要么用绝对路径,要么相对路径,但是路径一定要找对!