Documentation corrections/standardizations.
[wine] / ole / typelib.c
1 /*
2  *      TYPELIB
3  *
4  *      Copyright 1997  Marcus Meissner
5  */
6
7 #include <stdlib.h>
8 #include <string.h>
9 #include <assert.h>
10 #include "wintypes.h"
11 #include "heap.h"
12 #include "windows.h"
13 #include "winreg.h"
14 #include "winerror.h"
15 #include "ole.h"
16 #include "ole2.h"
17 #include "oleauto.h"
18 #include "compobj.h"
19 #include "debug.h"
20
21 /****************************************************************************
22  *              QueryPathOfRegTypeLib16 [TYPELIB.14]
23  *
24  * the path is "Classes\Typelib\<guid>\<major>.<minor>\<lcid>\win16\"
25  * RETURNS
26  *      path of typelib
27  */
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;
39
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
44                 );
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;
49         }
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;
54         }
55         *path = SysAllocString16(pathname);
56         return S_OK;
57 }
58  
59 /****************************************************************************
60  *              QueryPathOfRegTypeLib32 [OLEAUT32.164]
61  * RETURNS
62  *      path of typelib
63  */
64 HRESULT WINAPI
65 QueryPathOfRegTypeLib32(        
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         LPBSTR32 path   /* [out] path of typelib */
71 ) {
72         char    xguid[80];
73         char    typelibkey[100],pathname[260];
74         DWORD   plen;
75
76
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
81                 );
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;
86         }
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;
91         }
92         *path = HEAP_strdupAtoW(GetProcessHeap(),0,pathname);
93         return S_OK;
94 }
95
96 /******************************************************************************
97  * LoadTypeLib [TYPELIB.3]  Loads and registers a type library
98  * NOTES
99  *    Docs: OLECHAR FAR* szFile
100  *    Docs: iTypeLib FAR* FAR* pptLib
101  *
102  * RETURNS
103  *    Success: S_OK
104  *    Failure: Status
105  */
106 HRESULT WINAPI LoadTypeLib(
107     void *szFile,   /* [in] Name of file to load from */
108     void * *pptLib) /* [out] Pointer to pointer to loaded type library */
109 {
110     FIXME(ole, "(%s,%p): stub\n",debugstr_a(szFile),pptLib);
111     return E_FAIL;
112 }
113
114 /******************************************************************************
115  *              LoadTypeLib32   [OLEAUT32.161]
116  * Loads and registers a type library
117  * NOTES
118  *    Docs: OLECHAR FAR* szFile
119  *    Docs: iTypeLib FAR* FAR* pptLib
120  *
121  * RETURNS
122  *    Success: S_OK
123  *    Failure: Status
124  */
125 HRESULT WINAPI LoadTypeLib32(
126     void *szFile,   /* [in] Name of file to load from */
127     void * *pptLib) /* [out] Pointer to pointer to loaded type library */
128 {
129     FIXME(ole, "(%s,%p): stub\n",szFile,pptLib);
130     (long *)pptLib=0x123;
131     return S_OK;           /* fixme: pretend everything is OK*/
132 }
133
134 /******************************************************************************
135  *              RegisterTypeLib32       [OLEAUT32.163]
136  * Adds information about a type library to the System Registry           
137  * NOTES
138  *    Docs: ITypeLib FAR * ptlib
139  *    Docs: OLECHAR FAR* szFullPath
140  *    Docs: OLECHAR FAR* szHelpDir
141  *
142  * RETURNS
143  *    Success: S_OK
144  *    Failure: Status
145  */
146 HRESULT WINAPI RegisterTypeLib32(
147      ITypeLib * ptlib,      /*[in] Pointer to the library*/
148      OLECHAR * szFullPath, /*[in] full Path of the library*/
149      OLECHAR * szHelpDir)  /*[in] dir to the helpfile for the library, may be NULL*/  
150 {   FIXME(ole, "(%p,%s,%s): stub\n",ptlib, szFullPath,szHelpDir);
151     return S_OK;        /* fixme: pretend everything is OK*/
152 }
153
154 /****************************************************************************
155  *      OABuildVersion                          (TYPELIB.15)
156  * RETURNS
157  *      path of typelib
158  */
159 DWORD WINAPI OABuildVersion()
160 {
161         return MAKELONG(0xbd3, 0x3);
162 }