7 static VALUE reg_get_typelib_file_path(HKEY hkey);
9 static HRESULT oletypelib_from_guid(
VALUE guid,
VALUE version, ITypeLib **ppTypeLib);
10 static VALUE foletypelib_s_typelibs(
VALUE self);
11 static VALUE oletypelib_set_member(
VALUE self, ITypeLib *pTypeLib);
12 static void oletypelib_free(
void *
ptr);
13 static size_t oletypelib_size(
const void *
ptr);
16 static void oletypelib_get_libattr(ITypeLib *pTypeLib, TLIBATTR **ppTLibAttr);
23 static VALUE foletypelib_major_version(
VALUE self);
24 static VALUE foletypelib_minor_version(
VALUE self);
27 static VALUE foletypelib_library_name(
VALUE self);
28 static VALUE ole_types_from_typelib(ITypeLib *pTypeLib,
VALUE classes);
29 static VALUE typelib_file_from_typelib(
VALUE ole);
30 static VALUE typelib_file_from_clsid(
VALUE ole);
31 static VALUE foletypelib_ole_types(
VALUE self);
36 {
NULL, oletypelib_free, oletypelib_size,},
41 reg_get_typelib_file_path(HKEY hkey)
72 if (
err != ERROR_SUCCESS) {
80 if (
err == ERROR_SUCCESS) {
81 path = reg_get_typelib_file_path(hlang);
90 oletypelib_from_guid(
VALUE guid,
VALUE version, ITypeLib **ppTypeLib)
95 path = oletypelib_path(guid, version);
100 hr = LoadTypeLibEx(pBuf, REGKIND_NONE, ppTypeLib);
121 hr = pTypeInfo->lpVtbl->GetContainingTypeLib(pTypeInfo, &
pTypeLib, &
index);
146 foletypelib_s_typelibs(
VALUE self)
148 HKEY htypelib, hguid;
160 if(
err != ERROR_SUCCESS) {
168 if (
err != ERROR_SUCCESS)
175 hr = oletypelib_from_guid(guid, version, &
pTypeLib);
184 RegCloseKey(htypelib);
198 oletypelib_free(
void *
ptr)
206 oletypelib_size(
const void *
ptr)
212 foletypelib_s_allocate(VALUE klass)
231 oletypelib_search_registry(
VALUE self,
VALUE typelib)
233 HKEY htypelib, hguid, hversion;
244 if(
err != ERROR_SUCCESS) {
247 for(
i = 0; !found;
i++) {
252 if (
err != ERROR_SUCCESS)
254 for(j = 0; found ==
Qfalse; j++) {
259 if (
err != ERROR_SUCCESS)
263 RegCloseKey(hversion);
267 hr = oletypelib_from_guid(guid, ver, &
pTypeLib);
269 oletypelib_set_member(
self,
pTypeLib);
273 RegCloseKey(hversion);
277 RegCloseKey(htypelib);
282 oletypelib_get_libattr(ITypeLib *
pTypeLib, TLIBATTR **ppTLibAttr)
288 "failed to get library attribute(TLIBATTR) from ITypeLib");
293 oletypelib_search_registry2(
VALUE self,
VALUE args)
295 HKEY htypelib, hguid, hversion;
312 if(
err != ERROR_SUCCESS) {
316 if (
err != ERROR_SUCCESS) {
317 RegCloseKey(htypelib);
320 if (version_str !=
Qnil) {
322 if (
err == ERROR_SUCCESS) {
326 version = version_str;
329 RegCloseKey(hversion);
337 if (
err != ERROR_SUCCESS)
341 RegCloseKey(hversion);
349 RegCloseKey(hversion);
353 RegCloseKey(htypelib);
354 if (typelib !=
Qnil) {
355 hr = oletypelib_from_guid(guid, version, &
pTypeLib);
358 oletypelib_set_member(
self,
pTypeLib);
392 foletypelib_initialize(
VALUE self,
VALUE args)
408 found = oletypelib_search_registry(
self, typelib);
410 found = oletypelib_search_registry2(
self, args);
414 hr = LoadTypeLibEx(pbuf, REGKIND_NONE, &
pTypeLib);
418 oletypelib_set_member(
self,
pTypeLib);
439 foletypelib_guid(
VALUE self)
448 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
449 len = StringFromGUID2(&pTLibAttr->guid, bstr,
sizeof(bstr)/
sizeof(OLECHAR));
467 foletypelib_name(
VALUE self)
511 foletypelib_version(
VALUE self)
518 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
519 version =
rb_sprintf(
"%d.%d", pTLibAttr->wMajorVerNum, pTLibAttr->wMinorVerNum);
534 foletypelib_major_version(
VALUE self)
540 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
557 foletypelib_minor_version(
VALUE self)
563 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
579 foletypelib_path(
VALUE self)
589 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
590 hr = QueryPathOfRegTypeLib(&pTLibAttr->guid,
591 pTLibAttr->wMajorVerNum,
592 pTLibAttr->wMinorVerNum,
619 foletypelib_visible(
VALUE self)
626 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
628 if ((pTLibAttr->wLibFlags == 0) ||
629 (pTLibAttr->wLibFlags & LIBFLAG_FRESTRICTED) ||
630 (pTLibAttr->wLibFlags & LIBFLAG_FHIDDEN)) {
648 foletypelib_library_name(
VALUE self)
672 ITypeInfo *pTypeInfo;
695 typelib_file_from_typelib(
VALUE ole)
697 HKEY htypelib, hclsid, hversion, hlang;
709 if(
err != ERROR_SUCCESS) {
712 for(
i = 0; !found;
i++) {
717 if (
err != ERROR_SUCCESS)
720 for(j = 0; !found; j++) {
732 for(k = 0; !found; k++) {
737 if (
err == ERROR_SUCCESS) {
738 if ((file = reg_get_typelib_file_path(hlang)) !=
Qnil)
744 RegCloseKey(hversion);
748 RegCloseKey(htypelib);
753 typelib_file_from_clsid(
VALUE ole)
758 char path[MAX_PATH + 1];
761 if (
err != ERROR_SUCCESS) {
765 if (
err != ERROR_SUCCESS) {
772 if (typelib !=
Qnil) {
774 path[MAX_PATH] =
'\0';
783 VALUE file = typelib_file_from_clsid(ole);
787 return typelib_file_from_typelib(ole);
801 foletypelib_ole_types(
VALUE self)
806 ole_types_from_typelib(
pTypeLib, classes);
820 foletypelib_inspect(
VALUE self)