DBD-ADO

 view release on metacpan or  search on metacpan

ex/Enums.patch  view on Meta::CPAN

*** OLE.orig	Fri Aug 01 07:34:14 2003
--- OLE.xs	Wed Nov 05 22:32:20 2003
***************
*** 6584,6589 ****
--- 6584,6679 ----
      XSRETURN_EMPTY;
  }
  
+ void
+ Enums(self)
+     SV *self
+ PPCODE:
+ {
+     HRESULT hr;
+     UINT cp = cpDefault;
+     HV *stash = gv_stashpv(szWINOLE, TRUE);
+     HV *hv;
+     unsigned int count;
+ 
+     WINOLETYPELIBOBJECT *pObj = GetOleTypeLibObject(aTHX_ self);
+     if (!pObj)
+ 	XSRETURN_EMPTY;
+ 
+     hv = newHV();
+     ST(0) = sv_2mortal(newRV_noinc((SV*)hv));
+ 
+     /* loop through all objects in type lib */
+     count = pObj->pTypeLib->GetTypeInfoCount();
+     for (unsigned int index=0; index < count; ++index) {
+ 	ITypeInfo *pTypeInfo;
+ 	TYPEATTR  *pTypeAttr;
+ 
+ 	hr = pObj->pTypeLib->GetTypeInfo(index, &pTypeInfo);
+ 	if (CheckOleError(aTHX_ stash, hr))
+ 	    continue;
+ 
+ 	hr = pTypeInfo->GetTypeAttr(&pTypeAttr);
+ 	if (FAILED(hr)) {
+ 	    pTypeInfo->Release();
+ 	    ReportOleError(aTHX_ stash, hr);
+ 	    continue;
+ 	}
+ 
+ 	if ( pTypeAttr->typekind == TKIND_ENUM ) {
+ 	    unsigned int cName;
+ 	    BSTR bstr;
+ 	    char szName[64];
+ 
+ 	    hr = pTypeInfo->GetDocumentation(MEMBERID_NIL, &bstr, NULL, NULL, NULL);
+ 	    if (CheckOleError(aTHX_ stash, hr) || !bstr)
+ 	        continue;
+ 
+ 	    char *pszName = GetMultiByte(aTHX_ bstr, szName, sizeof(szName), cp);
+ 	    HV *hv2 = newHV();
+ 	    hv_store(hv, pszName, strlen(pszName), newRV_noinc((SV*)hv2), 0);
+ 	    SysFreeString(bstr);
+ 	    ReleaseBuffer(aTHX_ pszName, szName);
+ 
+ 	    for (int iVar=0; iVar < pTypeAttr->cVars; ++iVar) {
+ 		VARDESC *pVarDesc;
+ 
+ 		hr = pTypeInfo->GetVarDesc(iVar, &pVarDesc);
+ 		/* XXX LEAK alert */
+ 		if (CheckOleError(aTHX_ stash, hr))
+ 		    continue;
+ 
+ 		if (!(pVarDesc->wVarFlags & (VARFLAG_FHIDDEN |
+ 					     VARFLAG_FRESTRICTED |
+ 					     VARFLAG_FNONBROWSABLE)))
+ 		{
+ 		    unsigned int cName;
+ 		    BSTR bstr;



( run in 0.502 second using v1.01-cache-2.11-cpan-71847e10f99 )