vs2005 开发 COM--第一个程序
2012-07-12 09:39
225 查看
原文出自:/article/1641672.html
开发环境--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
有一点要注意,包含头文件时候,要么用绝对路径,要么相对路径,但是路径一定要找对!
开发环境--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
有一点要注意,包含头文件时候,要么用绝对路径,要么相对路径,但是路径一定要找对!
相关文章推荐
- vs2005 开发 COM--第一个程序
- 开启Android开发之旅:环境搭建及第一个Android程序:HelloWorld
- [SharePoint2010开发入门经典]创建你的第一个SPS2010程序
- 用VS2005开发ASP.NET 2.0数据库程序
- com组件开发嵌入式IE浏览器监控程序
- Win7下使用eclipse开发Android调用JNI-第一个程序
- 用MyEclipse开发第一个Struts程序
- [移动云计算开发 02] 第一个在手机内置浏览器跑的程序
- Windows8开发指南(16)开发基于Windows8的第一个metro界面C++程序
- Python札记(一)-开发环境搭建(ForMac)和第一个Python程序
- 开发第一个Spring Boot 程序
- 【Android开发】Android开发环境搭建----第一个Android程序Hello World(中)
- 开发第一个vaadin程序
- android开发3-第一个android程序
- 在vs2005下的第一个OpenGL程序。
- 最快速的Android开发环境搭建ADT-Bundle及完成第一个程序Hello World~
- 用VS2005开发WinCE程序调试图文教程
- 基于Xcode4开发第一个iPhone程序:“Hello World”
- 关于Eclipse平台的使用和开发第一个SWT程序
- Python开发环境搭建,开发工具配置,第一个Python程序