This page is in Pre Alpha. That means no grammer checks, no editting and speeling mistakes galore! The explanations and the final version will come soon. Check it out at your own risk! readtlb.cpp #include #include BSTR bstrname; int ii; char aa[100]; int m; ITypeLib *ptlib; HRESULT h; WNDCLASS a; HWND b; MSG c; TYPEKIND tk; ITypeInfo *g_ptinfocur; TYPEATTR *p; BSTR names[100]; FUNCDESC *pf; unsigned int cnames; unsigned short *bstr; unsigned short *psz; char * strtk[]={"Enum","struct","module","interface","dispinterface", "coclass","typedef","union"}; char *aaa(unsigned short *b) { char *c =(char *)malloc(1000); char *a = (char *)c; while (*b) { *c=*b; c++; b++; } *c=0; return a; } void abc(char *p) { FILE * fp; fp=fopen("c:\\s.txt","a"); fprintf(fp,"%s.\n",p); fclose(fp); } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x== WM_LBUTTONDOWN) { OleInitialize(0); h=LoadTypeLib(L"c:\\windows\\system\\stdole.tlb",&ptlib); int cc=ptlib->GetTypeInfoCount(); sprintf(aa,"Type Info count-------->%d",cc); abc(aa); for(ii=0;iiGetDocumentation(ii,&bstrname,0,0,0); sprintf(aa,"Name ...%s",aaa(bstrname)); abc(aa); ptlib->GetTypeInfoType(ii,&tk); sprintf(aa,"Type Kind...%s",strtk[tk]); abc(aa); h=ptlib->GetTypeInfo(ii,&g_ptinfocur); g_ptinfocur->GetTypeAttr(&p); long ll = p->cFuncs; sprintf(aa,"No. of Functions...%ld",ll); abc(aa); if ( ll !=0) { for (int kk = 0; kk < ll; kk++) { h=g_ptinfocur->GetFuncDesc(kk,&pf); long m; m=pf->memid; sprintf(aa,"Memid..%ld",m); abc(aa); g_ptinfocur->GetDocumentation(m,&bstrname,0,0,0); sprintf(aa,"Name of the Function..%s",aaa(bstrname)); abc(aa); g_ptinfocur->GetNames(m,names,100,&cnames); abc("Parameter names"); for(int jj=0;names[jj];jj++) abc(aaa(names[jj])); } } } MessageBox(0,"aaa","In zzz",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char *k,int l) { abc("Starting"); a.hInstance=i; a.hbrBackground=GetStockObject(WHITE_BRUSH); a.lpszClassName="aaa"; a.lpfnWndProc=zzz; RegisterClass(&a); b=CreateWindow("aaa","Client",WS_OVERLAPPEDWINDOW,1,1,100,100,0,0,i,0); ShowWindow(b,3); while (GetMessage(&c,0,0,0)) DispatchMessage(&c); return 1; } S.TXT Starting. Type Info count-------->6. Name ...GUID. Type Kind...struct. No. of Functions...0. Name ...DISPPARAMS. Type Kind...struct. No. of Functions...0. Name ...EXCEPINFO. Type Kind...struct. No. of Functions...0. Name ...IUnknown. Type Kind...interface. No. of Functions...3. Memid..1610612736. Name of the Function..QueryInterface. Parameter names. QueryInterface. riid. ppvObj. Memid..1610612737. Name of the Function..AddRef. Parameter names. AddRef. riid. ppvObj. Memid..1610612738. Name of the Function..Release. Parameter names. Release. riid. ppvObj. Name ...IDispatch. Type Kind...interface. No. of Functions...4. Memid..1610678272. Name of the Function..GetTypeInfoCount. Parameter names. GetTypeInfoCount. pctinfo. ppvObj. Memid..1610678273. Name of the Function..GetTypeInfo. Parameter names. GetTypeInfo. itinfo. lcid. pptinfo. Memid..1610678274. Name of the Function..GetIDsOfNames. Parameter names. GetIDsOfNames. riid. rgszNames. cNames. lcid. rgdispid. Memid..1610678275. Name of the Function..Invoke. Parameter names. Invoke. dispidMember. riid. lcid. wFlags. pdispparams. pvarResult. pexcepinfo. puArgErr. Name ...IEnumVARIANT. Type Kind...interface. No. of Functions...4. Memid..1610678272. Name of the Function..Next. Parameter names. Next. celt. rgvar. pceltFetched. wFlags. pdispparams. pvarResult. pexcepinfo. puArgErr. Memid..1610678273. Name of the Function..Skip. Parameter names. Skip. celt. rgvar. pceltFetched. wFlags. pdispparams. pvarResult. pexcepinfo. puArgErr. Memid..1610678274. Name of the Function..Reset. Parameter names. Reset. celt. rgvar. pceltFetched. wFlags. pdispparams. pvarResult. pexcepinfo. puArgErr. Memid..1610678275. Name of the Function..Clone. Parameter names. Clone. ppenum. rgvar. pceltFetched. wFlags. pdispparams. pvarResult. pexcepinfo. puArgErr.