PyObject *PyITypeLib::GetDocumentation(int pos) { BSTR name, docstring, helpfile; unsigned long helpctx; ITypeLib *pMyTypeLib = GetI(this); if (pMyTypeLib==NULL) return NULL; PY_INTERFACE_PRECALL; SCODE sc = pMyTypeLib->GetDocumentation(pos, &name, &docstring, &helpctx, &helpfile); PY_INTERFACE_POSTCALL; if (FAILED(sc)) return PyCom_BuildPyException(sc, pMyTypeLib, IID_ITypeLib); PyObject *obName = MakeOLECHARToObj(name); PyObject *obDocstring = MakeOLECHARToObj(docstring); PyObject *obHelpfile = MakeOLECHARToObj(helpfile); PyObject *ret = Py_BuildValue("(OOiO)", obName, obDocstring, helpctx, obHelpfile); SysFreeString(name); Py_XDECREF(obName); SysFreeString(docstring); Py_XDECREF(obDocstring); SysFreeString(helpfile); Py_XDECREF(obHelpfile); return ret; }
void tLuaCOM::getHelpInfo(char **ppHelpFile, DWORD *pHelpContext) { if(!hasTypeInfo()) { *ppHelpFile = NULL; return; } ITypeLib *typelib = NULL; BSTR helpfile; HRESULT hr = S_OK; hr = ptinfo->GetDocumentation(-1, NULL, NULL, pHelpContext, &helpfile); if(FAILED(hr) || helpfile == NULL) { *ppHelpFile = NULL; return; } // Se nao conseguiu help contextna propria interface, tenta obte-lo // na type library if(*pHelpContext == 0) { unsigned int dumb_index = 0; DWORD typelib_help_context = 0; BSTR helpfile_typelib; hr = ptinfo->GetContainingTypeLib(&typelib, &dumb_index); if(!FAILED(hr)) { hr = typelib->GetDocumentation(-1, NULL, NULL, &typelib_help_context, &helpfile_typelib); if(!FAILED(hr)) { SysFreeString(helpfile); helpfile = helpfile_typelib; *pHelpContext = typelib_help_context; } } } int str_size = SysStringLen(helpfile); *ppHelpFile = (char *) malloc((str_size + 1)*sizeof(wchar_t)); wcstombs(*ppHelpFile, helpfile, str_size+1); SysFreeString(helpfile); }