通过ITypeLib与ITypeInfo来简单了解这两个接口是如何来解析类型库中的;
先给一个类型库的测试源文件:
- [uuid(E1124082-5FCD-4a66-82A6-755E4D45A9FC), version(1.0), helpstring("IExample2 COM server")]
-
library IExample2
-
{
-
importlib("STDOLE2.TLB");
-
[uuid(B6127C55-AC5F-4ba0-AFF6-7220C95EEF4D), dual, oleautomation, hidden, nonextensible]
-
interface IExample2VTbl : IDispatch
-
{
-
[helpstring("Sets the test string.")]
-
[id(1)] HRESULT SetString([in] BSTR str);
-
[helpstring("Gets the test string.")]
-
[id(2)] HRESULT GetString([out, retval] BSTR *strptr);
-
};
-
-
[uuid(520F4CFD-61C6-4eed-8004-C26D514D3D19), helpstring("IExample2 object."), appobject]
-
coclass IExample2
-
{
-
[default] interface IExample2VTbl;
-
}
-
}
//通过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);
}
}
}
阅读(4530) | 评论(0) | 转发(0) |