ATL初级教程.doc_第1页
ATL初级教程.doc_第2页
ATL初级教程.doc_第3页
ATL初级教程.doc_第4页
ATL初级教程.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

介绍本教程的目的是告诉你如何使用ATL创建一个COM服务器,并使用Visual C+和Visual Basic程序来分别调用这个服务器。我并不想深入探讨COM的细节,也不想让你深陷于IDL之中。这一教程只是为VC+的新手程序员设计的,告诉他们利用ATL来创建一个COM对象有多么简单,并让他们能对ATL产生更多的兴趣。第1步:启动ATL COM Wizard你所需要做的第一件事情就是启动Visual C+并创建一个新的工程,选择“ATL COM Wizard”,工程名为“Simple_ATL”。设置好工程的路径之后,单击OK按钮。你会看到,屏幕上给了你若干选项。第一个选项为“Server Type”。我们将要创建一个服务器DLL,所以请确认服务器的类型选为“Dynamic Link Library”。我们并不需要关心下面的其它三个复选框,所以我们可以将它们忽略掉。按下Finish按钮,这样向导就会为你产生适当的文件了。之后,一个“New Project Information”窗口就会出现,你可以从上面得知向导都会创建什么文件,按下“OK”接受这一切。第2步:创建一个新的ATL对象请确认你能在VC+的IDE中看到Workspace View,如果不能的话则请单击“View”菜单,然后选择“Workspace”。在这个视图中你会看到三个选项卡,请单击“ClassView”栏,你应该会看到“Simple_ATL Classes”。请在此右击鼠标键,并在弹出菜单中选择“New ATL Object”,你将会看到下面这样的窗口:默认的选择项“Simple Object”就是我们所要的了,请单击next按钮,你会来到“ATL Object Wizard Properties”窗口中。在“Short Name”文本框中输入“First_ATL”。请注意,这时候向导就会自动地填写其它的文本框。然后,单击顶部的“Attributes”标签,在这里你需要做一些选择。第一项线程模型(Threading Model)的选择,我们选择默认的单元(Apartment)模型。对于接口(Interface),我们选择双重(Dual)。最后,因为我们的程序与聚合(Aggregation)无关,所以我们选择“No”的单选按钮。你不必关心底部的三个复选框,直接单击OK就可以了,这时候向导就会为我们创建一个新的ATL简单对象。第3步:添加一个方法如果你现在在工作区中单击了“ClassView”标签,那么你会注意到向导在其中添加了一串东西。我们想添加的第一个东西是一个方法,可以在“IFirst_ATL”上右击鼠标键,并选择“Add Method”。一旦你单击了“Add Method”之后,你就会看到“Add Method to Interface”窗口。在返回值类型(Return Type)处你会看到,这个方法会默认返回HRESULT,在大多数情况下你不需要改变它。下一个文本框允许我们输入方法的名称,我们可以输入“AddNumbers”。最后一个文本框是让我们输入参数的,由于我们想做两个数的相加并获得一个返回的结果,所以我们需要三个参数,并且最后一个参数是一个指针。现在,我们不必看那关于IDL的300页教程了,可以直接在参数文本框中输入:in long Num1, in long Num2, out long *ReturnVal简单地说来,我们声明了两个long类型的参数,这两个值是传入的(in),还有一个最后传出的返回值结果(out)。(你第一次看到这样的东西可能会有些奇怪,但是如果你读了一两本关于COM的书的话,就会觉得亲切多了。)现在就可以单击OK按钮了。然后,单击“ClassView”标签,并展开所有的“+”标志,使得树型视图完全展开。你会在接口(IFirst_ATL)的顶部看到我们的“AddNumbers”方法以及我们给予它的参数。在这个方法上双击鼠标键,并插入以下的代码: STDMETHODIMP CFirst_ATL:AddNumbers(long Num1, long Num2, long *ReturnVal) / TODO: Add your implementation code here *ReturnVal = Num1 + Num2; return S_OK;第4步:编译DLL无论你相信与否,你已经拥有一个用ATL编写的COM服务器了!当然,我们还需要编译它。请按下F7键,这样VC+就可以编译了。编译器工作片刻后就会在注册表中注册你的新DLL了,这样一来其它的程序就可以使用它了。让我们来测试一下。第5步:在Visual C+中测试COM服务器如果你的Simple_ATL工程仍然开着,那么就关了它并创建一个新工程。选择“Win32 Console Application”,起名为“Test_ATL”,在下一个窗口中单击OK按钮接受所有默认值,最后单击Finish按钮。现在,你应该有了一个空工程。那么,按下Ctrl+N为工程加入一个新文件,选择“C+ Source File”并命名为“Test_ATL.cpp”,单击OK接受。你现在应该有了一个打开的空白文件,我们需要在其中添加一些代码来测试COM服务器。代码如下:/ 你需要指明Simple_ATL工程的路径来引用这个头文件#include .Simple_ATLSimple_ATL.h#include / 把以下的内容从Simple_ATL工程目录的Simple_ATL_i.c文件中复制过来/ 注意:你也可以直接包含Simple_ATL_i.c文件,我在此只想清楚地表明这些const常量来自何处以及它们的样子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(5, 7, &ReturnValue); cout The answer for 5 + 7 is: R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论