ATL/COM简单工程

天二一下

天二一下

2016-02-19 16:40

今天给大家分享的是由图老师小编精心为您推荐的ATL/COM简单工程,喜欢的朋友可以分享一下,也算是给小编一份支持,大家都不容易啊!

  介绍

  本教程的目的是告诉你如何使用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对象

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  请确认你能在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了,这样一来其它的程序就可以使用它了。让我们来测试一下。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  第5步:在Visual Basic中测试COM服务器

  那么,先让我们用VB来测试这个COM服务器吧。(如果你没有VB的话,你可以跳过这一节,直接在VC++中测试。)启动VB,并选择标准EXE(Standard EXE)建立工程,并在对话框上放置一个命令按钮。现在,我们需要添加COM服务器的引用,请单击工程(Project)菜单并选择引用(References),找到Simple ATL 1.0 Type Library并选择它。

  单击确定(OK)按钮之后,你可以双击先前放置的命令按钮,VB会切换到这个按钮的代码窗口。添加以下的代码:

  

Private Sub Command1_Click()  Dim objTestATL As SIMPLE_ATLLib.First_ATL  Set objTestATL = New First_ATL  Dim lngReturnValue As Long  objTestATL.AddNumbers 5, 7, lngReturnValue  MsgBox "The value of 5 + 7 is: " & lngReturnValue  Set objTestATL = NothingEnd Sub

  如果你是个VB的程序员,那么这些代码对于你是很直观的:我们声明了一个对象,并从COM服务器调用AddNumbers的方法,然后显示结果。现在按下F5来运行这个VB工程,单击命令按钮,你就会看到期望的结果了:

  并不是很难吧?那么我们再来一次,这一次用VC++。

  第6步:在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 iostream.h// 把以下的内容从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: "          ReturnValue  endl;      IFirstATL-Release();     }    else    {      cout  "CoCreateInstance Failed."  endl;    }  }  // 卸载COM  CoUninitialize();}

  第7步:编译并运行程序

  现在你可以按下F5键来编译程序,然后按下Ctrl+F5来运行之。你应该可以看到一个DOS窗口,给出了你所期望的结果。

本文示例代码或素材下载

展开更多 50%)
分享

猜你喜欢

ATL/COM简单工程

编程语言 网络编程
ATL/COM简单工程

使用ATL编写一个简单的COM服务器

编程语言 网络编程
使用ATL编写一个简单的COM服务器

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

在ATL中实现窗口

C语言教程 C语言函数
在ATL中实现窗口

ATL的GUI程序设计(4)ATL的窗口类

编程语言 网络编程
ATL的GUI程序设计(4)ATL的窗口类

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ATL接口映射宏详解

C语言教程 C语言函数
ATL接口映射宏详解

Excel 工程函数

电脑入门
Excel 工程函数

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

游戏中对象选取的方法

游戏中对象选取的方法

用php获取信息实例

用php获取信息实例
下拉加载更多内容 ↓