7static VALUE reg_get_typelib_file_path(HKEY hkey);
9static HRESULT oletypelib_from_guid(
VALUE guid,
VALUE version, ITypeLib **ppTypeLib);
10static VALUE foletypelib_s_typelibs(
VALUE self);
11static VALUE oletypelib_set_member(
VALUE self, ITypeLib *pTypeLib);
12static void oletypelib_free(
void *
ptr);
13static size_t oletypelib_size(
const void *
ptr);
16static void oletypelib_get_libattr(ITypeLib *pTypeLib, TLIBATTR **ppTLibAttr);
23static VALUE foletypelib_major_version(
VALUE self);
24static VALUE foletypelib_minor_version(
VALUE self);
27static VALUE foletypelib_library_name(
VALUE self);
28static VALUE ole_types_from_typelib(ITypeLib *pTypeLib,
VALUE classes);
29static VALUE typelib_file_from_typelib(
VALUE ole);
30static VALUE typelib_file_from_clsid(
VALUE ole);
36 {
NULL, oletypelib_free, oletypelib_size,},
41reg_get_typelib_file_path(HKEY hkey)
72 if (
err != ERROR_SUCCESS) {
80 if (
err == ERROR_SUCCESS) {
81 path = reg_get_typelib_file_path(hlang);
90oletypelib_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);
146foletypelib_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);
198oletypelib_free(
void *
ptr)
206oletypelib_size(
const void *
ptr)
212foletypelib_s_allocate(VALUE klass)
231oletypelib_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);
282oletypelib_get_libattr(ITypeLib *
pTypeLib, TLIBATTR **ppTLibAttr)
288 "failed to get library attribute(TLIBATTR) from ITypeLib");
293oletypelib_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);
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);
439foletypelib_guid(
VALUE self)
448 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
449 len = StringFromGUID2(&pTLibAttr->guid, bstr,
sizeof(bstr)/
sizeof(OLECHAR));
467foletypelib_name(
VALUE self)
511foletypelib_version(
VALUE self)
518 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
519 version =
rb_sprintf(
"%d.%d", pTLibAttr->wMajorVerNum, pTLibAttr->wMinorVerNum);
534foletypelib_major_version(
VALUE self)
540 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
557foletypelib_minor_version(
VALUE self)
563 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
579foletypelib_path(
VALUE self)
589 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
590 hr = QueryPathOfRegTypeLib(&pTLibAttr->guid,
591 pTLibAttr->wMajorVerNum,
592 pTLibAttr->wMinorVerNum,
619foletypelib_visible(
VALUE self)
626 oletypelib_get_libattr(
pTypeLib, &pTLibAttr);
628 if ((pTLibAttr->wLibFlags == 0) ||
629 (pTLibAttr->wLibFlags & LIBFLAG_FRESTRICTED) ||
630 (pTLibAttr->wLibFlags & LIBFLAG_FHIDDEN)) {
648foletypelib_library_name(
VALUE self)
672 ITypeInfo *pTypeInfo;
695typelib_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);
753typelib_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);
801foletypelib_ole_types(
VALUE self)
806 ole_types_from_typelib(
pTypeLib, classes);
820foletypelib_inspect(
VALUE self)
VALUE rb_define_class(const char *, VALUE)
Defines a top-level class.
void rb_define_alias(VALUE, const char *, const char *)
Defines an alias of a method.
VALUE rb_cObject
Object class.
void rb_raise(VALUE exc, const char *fmt,...)
VALUE rb_String(VALUE)
Equivalent to Kernel#String in Ruby.
VALUE type(ANYARGS)
ANYARGS-ed function type.
LPWSTR ole_vstr2wc(VALUE vstr)
VALUE reg_get_val2(HKEY hkey, const char *subkey)
LONG reg_open_key(HKEY hkey, const char *name, HKEY *phkey)
typedef HRESULT(STDAPICALLTYPE FNCOCREATEINSTANCEEX)(REFCLSID
VALUE ole_wc2vstr(LPWSTR pw, BOOL isfree)
VALUE default_inspect(VALUE self, const char *class_name)
VALUE reg_get_val(HKEY hkey, const char *subkey)
void ole_initialize(void)
LONG reg_open_vkey(HKEY hkey, VALUE key, HKEY *phkey)
VALUE reg_enum_key(HKEY hkey, DWORD i)
VALUE eWIN32OLERuntimeError
void ole_raise(HRESULT hr, VALUE ecs, const char *fmt,...)
VALUE create_win32ole_type(ITypeInfo *pTypeInfo, VALUE name)
VALUE ole_typelib_from_itypeinfo(ITypeInfo *pTypeInfo)
void Init_win32ole_typelib(void)
VALUE typelib_file(VALUE ole)
VALUE create_win32ole_typelib(ITypeLib *pTypeLib)
ITypeLib * itypelib(VALUE self)