Chinaunix首页 | 论坛 | 博客
  • 博客访问: 445632
  • 博文数量: 96
  • 博客积分: 6045
  • 博客等级: 大校
  • 技术积分: 906
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-03 11:29
文章分类

全部博文(96)

文章存档

2014年(1)

2012年(22)

2011年(23)

2010年(31)

2008年(1)

2007年(18)

分类: C/C++

2011-06-18 12:34:01

通过ITypeLib与ITypeInfo来简单了解这两个接口是如何来解析类型库中的;
先给一个类型库的测试源文件:
  1. [uuid(E1124082-5FCD-4a66-82A6-755E4D45A9FC), version(1.0), helpstring("IExample2 COM server")]
  2. library IExample2
  3. {
  4.     importlib("STDOLE2.TLB");
  5.     [uuid(B6127C55-AC5F-4ba0-AFF6-7220C95EEF4D), dual, oleautomation, hidden, nonextensible]
  6.     interface IExample2VTbl : IDispatch
  7.     {
  8.         [helpstring("Sets the test string.")]
  9.         [id(1)] HRESULT SetString([in] BSTR str);
  10.         [helpstring("Gets the test string.")]
  11.         [id(2)] HRESULT GetString([out, retval] BSTR *strptr);
  12.     };

  13.     [uuid(520F4CFD-61C6-4eed-8004-C26D514D3D19), helpstring("IExample2 object."), appobject]
  14.     coclass IExample2
  15.     {
  16.         [default] interface IExample2VTbl;
  17.     }
  18. }

   //通过LoadTypeLib来加载,同时获得一个指向给类型库的指针:pITypeLib
   hr=LoadTypeLib(L"IExample2.tlb",&pITypeLib);
   if(SUCCEEDED(hr))
   {
    //获得类型库中的类型说明的数量。
     count=pITypeLib->lpVtbl->GetTypeInfoCount(pITypeLib);
      for(i=0; i      {
         //通过GetTypeInfo方法获得一个指向该类型信息的一个指针pITypeInfo
         hr = pITypeLib->lpVtbl->GetTypeInfo(pITypeLib,i, &pITypeInfo);
          if(SUCCEEDED(hr))
          {
              //获得类型说明的信息,例如获得该接口的接口名以及组件类名
              pITypeInfo->lpVtbl->GetDocumentation(pITypeInfo,MEMBERID_NIL, &bstrName, NULL, NULL, NULL);
              SysFreeString(bstrName);
          }
       }
   }
阅读(4428) | 评论(0) | 转发(0) |
0

上一篇:字符转换

下一篇:网络字符传递学习

给主人留下些什么吧!~~