ALT创建com组件以及测试方法

  1. 使用ATL创建进程内组件   
  2.     
  3.     
  4.   一、建立一个进程内组件   
  5.   1)打开菜单File|New,选择Projects标签,然后选择“ATL   COM   AppWizard”   
  6.   2)在Project   name栏输入step01,单击ok按钮,在下一个窗口单击Finish按钮   
  7.     
  8.   插入对象:   
  9.   3)打开菜单Insert|New   ATL   Object,在左边的Category中选择Objects,在右边的   
  10.   Objects中选择Simple   Object,单击“Next”按钮   
  11.   4)在Names标签中,Short   Name栏填写Simple01,不修改其他的属性,单击   
  12.   “确定”按钮。   
  13.     
  14.   加入接口方法:   
  15.   5)在Workspace的ClassView标签中右击“ISimple01”接口,从弹出的菜单中选择   
  16.   “Add   Method”,在弹出的窗口中,Method   Name栏填写GetOSVersion,Parameters   
  17.   栏填写[out,   retval]BSTR   *   bstrVersion   
  18.     
  19.   修改类CSimple01的函数STDMETHODIMP   CSimple01::GetOSVersion(BSTR   *bstrVersion)如下:   
  20.     
  21.     
  22.   //   Simple01.cpp   :   Implementation   of   CSimple01   
  23.   #include   "stdafx.h"   
  24.   #include   "Step01.h"   
  25.   #include   "Simple01.h"   
  26.     
  27.   //   加入comutil支持   
  28.   #include   <comutil.h>   
  29.   #pragma   comment(   lib,   "comsupp.lib"   )   
  30.     
  31.   /   
  32.   //   CSimple01   
  33.     
  34.   //   取操作系统信息   
  35.   STDMETHODIMP   CSimple01::GetOSVersion(BSTR   *bstrVersion)   
  36.   {   
  37.   char   szOSVersion[10];   
  38.   OSVERSIONINFO   VersionInformation;   
  39.                 VersionInformation.dwOSVersionInfoSize   =   sizeof(OSVERSIONINFO);   
  40.                 //   关于GetVersionEx请参考MSDN   
  41.   if(GetVersionEx(&VersionInformation))   
  42.   {   
  43.     switch(VersionInformation.dwPlatformId)   
  44.     {   
  45.     case   VER_PLATFORM_WIN32s:   
  46.       strcpy(szOSVersion,   "WIN32S");   
  47.       break;   
  48.     case   VER_PLATFORM_WIN32_WINDOWS:   
  49.       strcpy(szOSVersion,   "WIN95/98");   
  50.       break;   
  51.     case   VER_PLATFORM_WIN32_NT:   
  52.       strcpy(szOSVersion,   "WINNT");   
  53.       break;   
  54.     default:   
  55.       strcpy(szOSVersion,   "UnKnown");   
  56.       break;   
  57.     }   
  58.   }   
  59.   else   
  60.   {   
  61.     strcpy(szOSVersion,   "Error");   
  62.   }   
  63.   *bstrVersion   =   _com_util::ConvertStringToBSTR(szOSVersion);     
  64.   return   S_OK;   
  65.   }   
  66.     
  67.   编译程序,至此我们建立了一个进程内组件。下面我们编译proxy/stub程序   
  68.   6)进入“MS   DOS”状态,找到Step01的目录,运行nmake   step01ps.mk,将创建一个   
  69.   名为Step01ps.dll动态连接库,此动态连接库将在后面的创建com+应用中使用。   
  70.     
  71.   二、建立客户程序   
  72.   1)打开菜单File|New,选择Projects标签,然后选择“Win32   Console   Application”   
  73.   2)在Project   name栏输入Client,单击ok按钮,在下一个窗口单击Finish按钮   
  74.     
  75.   新建如下文件,并加入工程:   
  76.   //   Client.cpp   文件   
  77.     
  78.   #include   <windows.h>   
  79.   #include   <stdio.h>   
  80.   //   加入comutil支持   
  81.   #include   <comutil.h>   
  82.   #pragma   comment(   lib,   "comsupp.lib"   )   
  83.     
  84.   //   包含com的定义文件,以下两个文件从step01中拷贝出来   
  85.   #include   "../step01/step01.h"   
  86.   #include   "../step01/step01_i.c"   
  87.     
  88.   void   main()   
  89.   {   
  90.   ISimple01   *   pISimple01=NULL;     //   我们定义的接口   
  91.   BSTR     bstrOS;   
  92.     
  93.   //   初始化   
  94.   HRESULT   hr   =   CoInitialize(NULL);   
  95.   if(FAILED(hr))   
  96.   {   
  97.     printf("Coinitialize   failed!   hr=0x%x",   hr);   
  98.     return   ;   
  99.   }   
  100.     
  101.   //   创建COM对象   
  102.   hr   =   CoCreateInstance(CLSID_Simple01,   NULL,   CLSCTX_ALL,   
  103.                                         IID_ISimple01,   (void   **)&pISimple01);   
  104.   if(FAILED(hr))   
  105.   {   
  106.     printf("create   com   failed!   hr=0x%x",   hr);   
  107.     CoUninitialize();   
  108.     return   ;   
  109.   }   
  110.   //   获得操作系统   
  111.   hr   =   pISimple01->GetOSVersion(&bstrOS);   
  112.   if(FAILED(hr))   
  113.   {   
  114.     printf("pISimple01->GetOSVersion()   failed!   hr=0x%x",   hr);   
  115.     pISimple01->Release();   
  116.     CoUninitialize();   
  117.     return   ;   
  118.   }   
  119.   char   *pszOS;   
  120.   pszOS   =   _com_util::ConvertBSTRToString(bstrOS);     
  121.   printf("The   OS   is   %s/n",   pszOS);   
  122.     
  123.   //   释放分配的内存   
  124.   SysFreeString(bstrOS);   
  125.   delete   pszOS;   
  126.   pISimple01->Release();   
  127.   CoUninitialize();   
  128.     
  129.   return   ;   
  130.   }   
  131.     
  132.   三、说明   
  133.   1)我们的组件可以取得操作系统的版本,之所以用这个功能,在后面的DCOM与COM+的应用中,   
  134.   可以分辨出该组件有没有正确的运行。   
  135.   2)对进程内组建我们可以用regsvr32   step01.dll进行注册,而用regsvr32   /u   step01.dll注销。   
  136.   在windows   98下运行我们的Client.exe,可以得到   
  137.   The   OS   is   WIN95/98   
  138.   在windows   2000下运行我们的Client.exe,可以得到   
  139.   The   OS   is   WINNT   
  140.     
  141.     
  142.     
  143.     
  144.                                                             使用ATL创建进程外组件   
  145.     
  146.     
  147.   一、建立一个进程外组件   
  148.   1)打开菜单File|New,选择Projects标签,然后选择“ATL   COM   AppWizard”   
  149.   2)在Project   name栏输入step02,单击ok按钮,在下一个窗口中的Server   Type栏选择   
  150.   “Executable   (Exe)”之后,单击Finish按钮   
  151.     
  152.   然后插入对象(与创建进程内组件类似):   
  153.   3)打开菜单Insert|New   ATL   Object,在左边的Category中选择Objects,在右边的   
  154.   Objects中选择Simple   Object,单击“Next”按钮   
  155.   4)在Names标签中,Short   Name栏填写Simple02,不修改其他的属性,单击   
  156.   “确定”按钮。   
  157.     
  158.   加入接口方法:   
  159.   5)在Workspace的ClassView标签中右击“ISimple02”接口,从弹出的菜单中选择   
  160.   “Add   Method”,在弹出的窗口中,Method   Name栏填写GetOSVersion,Parameters     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值