Release 990226.
[wine/gsoc-2012-control.git] / ole / typelib.c
blobbd87d1e0d060b077362da544d4cfd5d220e03aa9
1 /*
2 * TYPELIB
4 * Copyright 1997 Marcus Meissner
5 */
7 #include <stdlib.h>
8 #include <string.h>
9 #include <assert.h>
10 #include "wintypes.h"
11 #include "wine/winbase16.h"
12 #include "heap.h"
13 #include "winreg.h"
14 #include "winerror.h"
15 #include "oleauto.h"
16 #include "wine/obj_base.h"
17 #include "objbase.h"
18 #include "debug.h"
19 #include "winversion.h"
21 /****************************************************************************
22 * QueryPathOfRegTypeLib16 [TYPELIB.14]
24 * the path is "Classes\Typelib\<guid>\<major>.<minor>\<lcid>\win16\"
25 * RETURNS
26 * path of typelib
28 HRESULT WINAPI
29 QueryPathOfRegTypeLib16(
30 REFGUID guid, /* [in] referenced guid */
31 WORD wMaj, /* [in] major version */
32 WORD wMin, /* [in] minor version */
33 LCID lcid, /* [in] locale id */
34 LPBSTR16 path /* [out] path of typelib */
35 ) {
36 char xguid[80];
37 char typelibkey[100],pathname[260];
38 DWORD plen;
40 if (HIWORD(guid)) {
41 WINE_StringFromCLSID(guid,xguid);
42 sprintf(typelibkey,"SOFTWARE\\Classes\\Typelib\\%s\\%d.%d\\%ld\\win16",
43 xguid,wMaj,wMin,lcid&0xff
45 } else {
46 sprintf(xguid,"<guid 0x%08lx>",(DWORD)guid);
47 FIXME(ole,"(%s,%d,%d,0x%04lx,%p),can't handle non-string guids.\n",xguid,wMaj,wMin,(DWORD)lcid,path);
48 return E_FAIL;
50 plen = sizeof(pathname);
51 if (RegQueryValue16(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen)) {
52 FIXME(ole,"key %s not found\n",typelibkey);
53 return E_FAIL;
55 *path = SysAllocString16(pathname);
56 return S_OK;
59 /****************************************************************************
60 * QueryPathOfRegTypeLib32 [OLEAUT32.164]
61 * RETURNS
62 * path of typelib
64 HRESULT WINAPI
65 QueryPathOfRegTypeLib(
66 REFGUID guid, /* [in] referenced guid */
67 WORD wMaj, /* [in] major version */
68 WORD wMin, /* [in] minor version */
69 LCID lcid, /* [in] locale id */
70 LPBSTR path /* [out] path of typelib */
71 ) {
72 char xguid[80];
73 char typelibkey[100],pathname[260];
74 DWORD plen;
77 if (HIWORD(guid)) {
78 WINE_StringFromCLSID(guid,xguid);
79 sprintf(typelibkey,"SOFTWARE\\Classes\\Typelib\\%s\\%d.%d\\%ld\\win32",
80 xguid,wMaj,wMin,lcid&0xff
82 } else {
83 sprintf(xguid,"<guid 0x%08lx>",(DWORD)guid);
84 FIXME(ole,"(%s,%d,%d,0x%04lx,%p),stub!\n",xguid,wMaj,wMin,(DWORD)lcid,path);
85 return E_FAIL;
87 plen = sizeof(pathname);
88 if (RegQueryValue16(HKEY_LOCAL_MACHINE,typelibkey,pathname,&plen)) {
89 FIXME(ole,"key %s not found\n",typelibkey);
90 return E_FAIL;
92 *path = HEAP_strdupAtoW(GetProcessHeap(),0,pathname);
93 return S_OK;
96 /******************************************************************************
97 * LoadTypeLib [TYPELIB.3] Loads and registers a type library
98 * NOTES
99 * Docs: OLECHAR32 FAR* szFile
100 * Docs: iTypeLib FAR* FAR* pptLib
102 * RETURNS
103 * Success: S_OK
104 * Failure: Status
106 HRESULT WINAPI LoadTypeLib16(
107 OLECHAR *szFile, /* [in] Name of file to load from */
108 void * *pptLib) /* [out] Pointer to pointer to loaded type library */
110 FIXME(ole, "('%s',%p): stub\n",debugstr_w((LPWSTR)szFile),pptLib);
112 if (pptLib!=0)
113 *pptLib=0;
115 return E_FAIL;
118 /******************************************************************************
119 * LoadTypeLib32 [OLEAUT32.161]
120 * Loads and registers a type library
121 * NOTES
122 * Docs: OLECHAR32 FAR* szFile
123 * Docs: iTypeLib FAR* FAR* pptLib
125 * RETURNS
126 * Success: S_OK
127 * Failure: Status
129 HRESULT WINAPI LoadTypeLib(
130 OLECHAR *szFile, /* [in] Name of file to load from */
131 void * *pptLib) /* [out] Pointer to pointer to loaded type library */
133 FIXME(ole, "('%s',%p): stub\n",debugstr_w(szFile),pptLib);
135 if (pptLib!=0)
136 *pptLib=0;
138 return E_FAIL;
141 /******************************************************************************
142 * LoadRegTypeLib [OLEAUT32.162]
144 HRESULT WINAPI LoadRegTypeLib(
145 REFGUID rguid,
146 unsigned short wVerMajor,
147 unsigned short wVerMinor,
148 LCID lcid,
149 void** pptLib)
151 FIXME(ole, "(): stub\n");
153 if (pptLib!=0)
154 *pptLib=0;
156 return E_FAIL;
159 /******************************************************************************
160 * RegisterTypeLib32 [OLEAUT32.163]
161 * Adds information about a type library to the System Registry
162 * NOTES
163 * Docs: ITypeLib FAR * ptlib
164 * Docs: OLECHAR32 FAR* szFullPath
165 * Docs: OLECHAR32 FAR* szHelpDir
167 * RETURNS
168 * Success: S_OK
169 * Failure: Status
171 HRESULT WINAPI RegisterTypeLib(
172 ITypeLib * ptlib, /*[in] Pointer to the library*/
173 OLECHAR * szFullPath, /*[in] full Path of the library*/
174 OLECHAR * szHelpDir) /*[in] dir to the helpfile for the library, may be NULL*/
175 { FIXME(ole, "(%p,%s,%s): stub\n",ptlib, debugstr_w(szFullPath),debugstr_w(szHelpDir));
176 return S_OK; /* FIXME: pretend everything is OK */
179 /****************************************************************************
180 * OABuildVersion (TYPELIB.15)
181 * RETURNS
182 * path of typelib
184 DWORD WINAPI OABuildVersion16(void)
186 WINDOWS_VERSION ver = VERSION_GetVersion();
188 switch (ver) {
189 case WIN95:
190 return MAKELONG(0xbd0, 0xa); /* Win95A */
191 case WIN31:
192 return MAKELONG(0xbd3, 0x3); /* WfW 3.11 */
193 default:
194 FIXME(ole, "Version value not known yet. Please investigate it !");
195 return MAKELONG(0xbd0, 0xa); /* return Win95A for now */