guid()
public
static VALUE
foletypelib_guid(VALUE self)
{
struct oletypelibdata *ptlib;
ITypeLib *pTypeLib;
HRESULT hr;
OLECHAR bstr[80];
VALUE guid = Qnil;
int len;
TLIBATTR *pTLibAttr;
Data_Get_Struct(self, struct oletypelibdata, ptlib);
pTypeLib = ptlib->pTypeLib;
hr = pTypeLib->lpVtbl->GetLibAttr(pTypeLib, &pTLibAttr);
if (FAILED(hr)) {
ole_raise(hr, eWIN32OLERuntimeError, "failed to GetLibAttr from ITypeLib");
}
len = StringFromGUID2(&pTLibAttr->guid, bstr, sizeof(bstr)/sizeof(OLECHAR));
if (len > 3) {
guid = ole_wc2vstr(bstr, FALSE);
}
pTypeLib->lpVtbl->ReleaseTLibAttr(pTypeLib, pTLibAttr);
return guid;
}