您的位置:首页 > 编程语言 > C语言/C++

C++ VS 2008中ATL的创建,使用。并在C++项目以及C#项目中进行调用测试

2011-11-18 15:44 886 查看
一、前言
  1、本回讲解的是在 VS 2008 下的使用ATL. 并使用Win 32 Console Application进行测试以及C#项目进行测试(调用COM).

  2、这第一个组件,除了所有 COM 组件必须的 IUnknown 接口外,我们再实现一个自己定义的接口 IFunTest,它有一个简单的函数: Sum()完成两个数值的加法

  3、ATL的介绍

 ATL本来被设计成一种书写快捷的小的COM组件。

   ATL特性:(1)C++能完成的所有功能。

(2)没有外部程序库,除非你想要使用它。

(3) 一种抽象对象和接口的相对高级的方式。

        (4)类集合的自动处理,目标创建,参考计算和查询界面。 标准接口的实现。

     (5) 用C++写一个独立的ActiveX控件,你必须亲自书写实现每个接口的每种方法。

二、1、创建ATL Project

步骤1:建立一个解决方案。   步骤2:在 该解决方案中,新建一个 vc++ 的 ATL 项目。见下图



选择Dynamic-link library(DLL)



2、向工程中添加ATL对象



选择ATL Simple Object



名字为FunTest



Interface选择Custom



3、在接口中添加方法.(在类视图中)



方法名为Sum,参数如下图,有三个参数



接口方法的实现, 这个太简单了

STDMETHODIMP CFunTest::Sum(LONG num1, LONG num2, LONG* pVal)
{
// TODO: Add your implementation code here
*pVal = num1 + num2;
return S_OK;
}


 

三、新建Win 32 Application进行测试

#include "E:\..\ATLProjectTest\ATLProjectTest_i.h"
#include "E:\..\ATLProjectTest\ATLProjectTest_i.c"
int main(void)
{

//声明HRESULT和iFun接口指针
IFunTest * iFun = NULL;

//初始化COM
HRESULT hr = CoInitialize(NULL);

//使用SUCCEEDED宏并检查我们是否能得到一个接口指针
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_FunTest,NULL,CLSCTX_INPROC_SERVER,IID_IFunTest,(void**)&iFun);
}

//如果成功,则调用Sum方法,否则显示相应的出错信息
if (SUCCEEDED(hr))
{
long ReturnValue;
iFun->Sum(30,32,&ReturnValue);
cout << "The return value for 30 + 32 is :" << ReturnValue << endl;
iFun->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
//释放COM
CoUninitialize();
return 0;
}


  

显示:



四、在C# 项目中进行测试步骤

1、添加引用(选择Com),找到对应的DLL

2、引用命名空间,(引用对应的命名空间)

3、new实例,调用函数

可参考:.Net 互操作性/article/4782965.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: