使用ATL创建COM程序实例

来源:互联网 发布:java选择题 编辑:程序博客网 时间:2024/06/01 09:40

项目简绍:

一.利用ATL开发一个COM,实现一个可以获得当前操作系统的接. 

二.创建一个Win32 console Application 程序,在其中调用创建的

1.创建工程

(1)创建一个ATL COM AppWizard,名为 test01.

(2)插入COM对象,命名为Test Atl

(3)加入接口方法HRESUTL GetOSVersion([out,retval]BSTR * bstrVersion)

(4)修改CTestAtl的函数STDMETHODIMP CTestAtl::GetVersion(BSTR *bstrVersion);

代码如下:

STDMETHODIMP CTestAtl::GetOsVersion(BSTR *bstrVersion)
{
 char szOSVersion[20];
 OSVERSIONINFO VersionInfomation;
    VersionInfomation.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
 if(GetVersionEx(&VersionInfomation))
 {
  switch(VersionInfomation.dwPlatformId)
  {
  case VER_PLATFORM_WIN32s:
   strcpy(szOSVersion,"WIN32s");
   break;
  case VER_PLATFORM_WIN32_WINDOWS:
   strcpy(szOSVersion,"WIN95/98");
   break;
  case VER_PLATFORM_WIN32_NT:
   strcpy(szOSVersion,"WINNT");
   break;
  default:
   strcpy(szOSVersion,"UnKnown");
   break;
 }
 }
 
 else
  {
             strcpy(szOSVersion,"ERROR");
  }
     * bstrVersion=_com_util::ConvertStringToBSTR(szOSVersion);
  return S_OK;
}

 编译程序,至此我们建立一个进程内组件,生成test01.dll.单击集成开发环境"TOOL---RegisterCotrol"菜单,注册该组件

创建客户端程序,测试该组件

#include <windows.h>
#include <stdio.h>
#include <comutil.h>
#pragma comment (lib,"comsupp.lib")
#include "../test01/test01.h"
#include "../test01/test01_i.c"
void main()
{

 ITestAtl * pITestAtl=NULL;
 BSTR bstrOS;
 //初始化
 HRESULT hr= ::CoInitialize(NULL);
 if(FAILED(hr))
 {
  printf("组件初始化失败!hr=0x%x",hr);
  return;
 }
 //创建COM
 hr=::CoCreateInstance(CLSID_TestAtl,NULL,CLSCTX_ALL,IID_ITestAtl,(void **)&pITestAtl);
 if(FAILED(hr))
 {
  printf("组件创建失败!hr=0x%x",hr);
  ::CoUninitialize();
  return;

 }
 hr=pITestAtl->GetOsVersion(&bstrOS);
    if(FAILED(hr))
 {
  printf("pITestAtl->GetOSVersion()方法调用失败!hr=0x%x",hr);
     pITestAtl->Release();
  ::CoUninitialize();
  return;
 }
 char * pszOS;
 pszOS=_com_util::ConvertBSTRToString(bstrOS);
 printf("this os is %s/n",pszOS);
 //释放内存资源
 SysFreeString(bstrOS);
 delete pszOS;
 pITestAtl->Release();
 ::CoUninitialize();
 return;
}

 

原创粉丝点击