学习ITypeLib与ITypeInfo的基础用法

4701阅读 0评论2011-06-18 光速
分类:C/C++

通过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);
          }
       }
   }
上一篇:字符转换
下一篇:网络字符传递学习