4 * Copyright 1995 Martin von Loewis
7 /* At the moment, these are only empty stubs.
19 #include "interfaces.h"
22 DWORD currentMalloc
=0;
24 /***********************************************************************
25 * CoBuildVersion [COMPOBJ.1]
27 DWORD WINAPI
CoBuildVersion()
29 dprintf_ole(stddeb
,"CoBuildVersion()\n");
33 /***********************************************************************
34 * CoInitialize [COMPOBJ.2]
35 * lpReserved is an IMalloc pointer in 16bit OLE. We just stored it as-is.
37 HRESULT WINAPI
CoInitialize(DWORD lpReserved
)
39 dprintf_ole(stdnimp
,"CoInitialize\n");
40 /* remember the LPMALLOC, maybe somebody wants to read it later on */
41 currentMalloc
= lpReserved
;
45 /***********************************************************************
46 * CoUnitialize [COMPOBJ.3]
48 void WINAPI
CoUnitialize()
50 dprintf_ole(stdnimp
,"CoUnitialize()\n");
53 /***********************************************************************
54 * CoGetMalloc [COMPOBJ.4]
56 HRESULT WINAPI
CoGetMalloc(DWORD dwMemContext
, DWORD
* lpMalloc
)
60 *lpMalloc
= currentMalloc
;
64 /* 16-bit E_NOTIMPL */
68 /***********************************************************************
71 OLESTATUS WINAPI
CoDisconnectObject( LPUNKNOWN lpUnk
, DWORD reserved
)
73 dprintf_ole(stdnimp
,"CoDisconnectObject:%p %lx\n",lpUnk
,reserved
);
77 /***********************************************************************
78 * IsEqualGUID [COMPOBJ.18]
80 BOOL16 WINAPI
IsEqualGUID(GUID
* g1
, GUID
* g2
)
82 return !memcmp( g1
, g2
, sizeof(GUID
) );
85 /***********************************************************************
86 * CLSIDFromString [COMPOBJ.20]
89 /* Class id: DWORD-WORD-WORD-BYTES[2]-BYTES[6] */
91 OLESTATUS WINAPI
CLSIDFromString(const LPCSTR idstr
, CLSID
*id
)
93 BYTE
*s
= (BYTE
*) idstr
;
98 dprintf_ole(stddeb
,"ClsIDFromString() %s -> %p\n", idstr
, id
);
100 /* quick lookup table */
101 memset(table
, 0, 256);
103 for (i
= 0; i
< 10; i
++) {
106 for (i
= 0; i
< 6; i
++) {
107 table
['A' + i
] = i
+10;
108 table
['a' + i
] = i
+10;
111 /* in form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} */
113 if (strlen(idstr
) != 38)
114 return OLE_ERROR_OBJECT
;
118 s
++; /* skip leading brace */
119 for (i
= 0; i
< 4; i
++) {
120 p
[3 - i
] = table
[*s
]<<4 | table
[*(s
+1)];
126 for (i
= 0; i
< 2; i
++) {
127 p
[1-i
] = table
[*s
]<<4 | table
[*(s
+1)];
133 for (i
= 0; i
< 2; i
++) {
134 p
[1-i
] = table
[*s
]<<4 | table
[*(s
+1)];
140 /* these are just sequential bytes */
141 for (i
= 0; i
< 2; i
++) {
142 *p
++ = table
[*s
]<<4 | table
[*(s
+1)];
147 for (i
= 0; i
< 6; i
++) {
148 *p
++ = table
[*s
]<<4 | table
[*(s
+1)];
155 /***********************************************************************
156 * CLSIDFromString [COMPOBJ.19]
159 OLESTATUS WINAPI
StringFromCLSID(const CLSID
*id
, LPSTR idstr
)
161 static const char *hex
= "0123456789ABCDEF";
165 sprintf(idstr
, "{%08lx-%04x-%04x-%02x%02x-",
166 id
->Data1
, id
->Data2
, id
->Data3
,
167 id
->Data4
[0], id
->Data4
[1]);
171 for (i
= 2; i
< 8; i
++) {
172 *s
++ = hex
[id
->Data4
[i
]>>4];
173 *s
++ = hex
[id
->Data4
[i
] & 0xf];
179 for (i
= strlen(idstr
)-1; i
>= 0; i
--) {
180 idstr
[i
] = toupper(idstr
[i
]);
183 dprintf_ole(stddeb
,"StringFromClsID: %p->%s\n", id
, idstr
);