Extended the winmm joystick API calls to support the new Linux
[wine] / dlls / oleaut32 / oleaut.c
1 /*
2  *      OLEAUT32
3  *
4  */
5 #include <string.h>
6 #include "winuser.h"
7 #include "winerror.h"
8 #include "winversion.h"
9 #include "oleauto.h"
10 #include "wine/obj_base.h"
11 #include "wine/obj_moniker.h"
12 #include "heap.h"
13 #include "ldt.h"
14 #include "debugtools.h"
15
16 DEFAULT_DEBUG_CHANNEL(ole);
17
18 static WCHAR    _delimiter[2] = {'!',0}; /* default delimiter apparently */
19 static WCHAR    *pdelimiter = &_delimiter[0];
20
21 HRESULT WINAPI RegisterActiveObject(
22         LPUNKNOWN punk,REFCLSID rcid,DWORD dwFlags,LPDWORD pdwRegister
23 ) {
24         WCHAR                   guidbuf[80];
25         HRESULT                 ret;
26         LPRUNNINGOBJECTTABLE    runobtable;
27         LPMONIKER               moniker;
28
29         StringFromGUID2(rcid,guidbuf,39);
30         ret = CreateItemMoniker(pdelimiter,guidbuf,&moniker);
31         if (FAILED(ret)) 
32                 return ret;
33         ret = GetRunningObjectTable(0,&runobtable);
34         if (FAILED(ret)) {
35                 IMoniker_Release(moniker);
36                 return ret;
37         }
38         ret = IRunningObjectTable_Register(runobtable,dwFlags,punk,moniker,pdwRegister);
39         IRunningObjectTable_Release(runobtable);
40         IMoniker_Release(moniker);
41         return ret;
42 }
43
44 HRESULT WINAPI RevokeActiveObject(DWORD xregister,LPVOID reserved)
45 {
46         LPRUNNINGOBJECTTABLE    runobtable;
47         HRESULT                 ret;
48
49         ret = GetRunningObjectTable(0,&runobtable);
50         if (FAILED(ret)) return ret;
51         ret = IRunningObjectTable_Revoke(runobtable,xregister);
52         if (SUCCEEDED(ret)) ret = S_OK;
53         IRunningObjectTable_Release(runobtable);
54         return ret;
55 }
56
57 HRESULT WINAPI GetActiveObject(REFCLSID rcid,LPVOID preserved,LPUNKNOWN *ppunk)
58 {
59         WCHAR                   guidbuf[80];
60         HRESULT                 ret;
61         LPRUNNINGOBJECTTABLE    runobtable;
62         LPMONIKER               moniker;
63
64         StringFromGUID2(rcid,guidbuf,39);
65         ret = CreateItemMoniker(pdelimiter,guidbuf,&moniker);
66         if (FAILED(ret)) 
67                 return ret;
68         ret = GetRunningObjectTable(0,&runobtable);
69         if (FAILED(ret)) {
70                 IMoniker_Release(moniker);
71                 return ret;
72         }
73         ret = IRunningObjectTable_GetObject(runobtable,moniker,ppunk);
74         IRunningObjectTable_Release(runobtable);
75         IMoniker_Release(moniker);
76         return ret;
77 }
78
79 /***********************************************************************
80  *           OaBuildVersion           [OLEAUT32.170]
81  *
82  * known OLEAUT32.DLL versions:
83  * OLE 2.1  NT                          1993-95 10     3023
84  * OLE 2.1                                      10     3027
85  * OLE 2.20 W95/NT                      1993-96 20     4112
86  * OLE 2.20 W95/NT                      1993-96 20     4118
87  * OLE 2.20 W95/NT                      1993-96 20     4122
88  * OLE 2.30 W95/NT                      1993-98 30     4265
89  * OLE 2.40 NT??                        1993-98 40     4267
90  * OLE 2.40 W98 SE orig. file           1993-98 40     4275
91  */
92 UINT WINAPI OaBuildVersion()
93 {
94     FIXME("Please report to a.mohr@mailto.de if you get version error messages !\n");
95     switch(VERSION_GetVersion())
96     {
97         case WIN31:
98                 return MAKELONG(4049, 20); /* from Win32s 1.1e */
99         case WIN95:
100                 return MAKELONG(4265, 30);
101         case WIN98:
102                 return MAKELONG(4275, 40); /* value of W98 SE; orig. W98 AFAIK has 4265, 30 just as W95 */
103         case NT351:
104                 return MAKELONG(4265, 30); /* value borrowed from Win95 */
105         case NT40:
106                 return MAKELONG(4122, 20); /* ouch ! Quite old, I guess */
107         default:
108                 ERR("Version value not known yet. Please investigate it !\n");
109                 return 0x0;
110     }
111 }