Release 980201
[wine/multimedia.git] / ole / ifs.c
blob958a0ae8e6970b014e3ee213edbb9acc2107fc33
1 /*
2 * basic interfaces
4 * Copyright 1997 Marcus Meissner
5 */
7 #include <ctype.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include "winerror.h"
11 #include "ole.h"
12 #include "ole2.h"
13 #include "compobj.h"
14 #include "interfaces.h"
15 #include "shlobj.h"
16 #include "stddebug.h"
17 #include "debug.h"
19 static ULONG WINAPI IUnknown_AddRef(LPUNKNOWN this) {
20 dprintf_relay(stddeb,"IUnknown(%p)->AddRef()\n",this);
21 return ++(this->ref);
23 static ULONG WINAPI IUnknown_Release(LPUNKNOWN this) {
24 dprintf_relay(stddeb,"IUnknown(%p)->Release()\n",this);
25 if (!--(this->ref)) {
26 HeapFree(GetProcessHeap(),0,this);
27 return 0;
29 return this->ref;
32 static HRESULT WINAPI IUnknown_QueryInterface(LPUNKNOWN this,REFIID refiid,LPVOID *obj) {
33 char xrefiid[50];
35 StringFromCLSID((LPCLSID)refiid,xrefiid);
36 dprintf_relay(stddeb,"IUnknown(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
38 if (!memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown))) {
39 *obj = this;
40 return 0;
42 return OLE_E_ENUM_NOMORE;
45 static IUnknown_VTable uvt = {
46 IUnknown_QueryInterface,
47 IUnknown_AddRef,
48 IUnknown_Release
52 LPUNKNOWN
53 IUnknown_Constructor() {
54 LPUNKNOWN unk;
56 fprintf(stderr,"cloning IUnknown.\n");
57 unk = (LPUNKNOWN)HeapAlloc(GetProcessHeap(),0,sizeof(IUnknown));
58 unk->lpvtbl = &uvt;
59 unk->ref = 1;
60 return unk;
63 static ULONG WINAPI IMalloc_AddRef(LPMALLOC this) {
64 dprintf_relay(stddeb,"IMalloc(%p)->AddRef()\n",this);
65 return 1; /* cannot be freed */
68 static ULONG WINAPI IMalloc_Release(LPMALLOC this) {
69 dprintf_relay(stddeb,"IMalloc(%p)->Release()\n",this);
70 return 1; /* cannot be freed */
73 static HRESULT WINAPI IMalloc_QueryInterface(LPMALLOC this,REFIID refiid,LPVOID *obj) {
74 char xrefiid[50];
76 StringFromCLSID((LPCLSID)refiid,xrefiid);
77 dprintf_relay(stddeb,"IMalloc(%p)->QueryInterface(%s,%p)\n",this,xrefiid,obj);
78 if ( !memcmp(&IID_IUnknown,refiid,sizeof(IID_IUnknown)) ||
79 !memcmp(&IID_IMalloc,refiid,sizeof(IID_IMalloc))
80 ) {
81 *obj = this;
82 return 0;
84 return OLE_E_ENUM_NOMORE;
87 static LPVOID WINAPI IMalloc_Alloc(LPMALLOC this,DWORD cb) {
88 dprintf_relay(stddeb,"IMalloc(%p)->Alloc(%ld)\n",this,cb);
89 return HeapAlloc(GetProcessHeap(),0,cb);
92 static LPVOID WINAPI IMalloc_Realloc(LPMALLOC this,LPVOID pv,DWORD cb) {
93 dprintf_relay(stddeb,"IMalloc(%p)->Realloc(%p,%ld)\n",this,pv,cb);
94 return HeapReAlloc(GetProcessHeap(),0,pv,cb);
96 static VOID WINAPI IMalloc_Free(LPMALLOC this,LPVOID pv) {
97 dprintf_relay(stddeb,"IMalloc(%p)->Free(%p)\n",this,pv);
98 HeapFree(GetProcessHeap(),0,pv);
101 static DWORD WINAPI IMalloc_GetSize(LPMALLOC this,LPVOID pv) {
102 dprintf_relay(stddeb,"IMalloc(%p)->GetSize(%p)\n",this,pv);
103 return HeapSize(GetProcessHeap(),0,pv);
106 static LPINT32 WINAPI IMalloc_DidAlloc(LPMALLOC this,LPVOID pv) {
107 dprintf_relay(stddeb,"IMalloc(%p)->DidAlloc(%p)\n",this,pv);
108 return (LPINT32)0xffffffff;
110 static LPVOID WINAPI IMalloc_HeapMinimize(LPMALLOC this) {
111 dprintf_relay(stddeb,"IMalloc(%p)->HeapMinimize()\n",this);
112 return NULL;
115 static IMalloc_VTable VT_IMalloc = {
116 IMalloc_QueryInterface,
117 IMalloc_AddRef,
118 IMalloc_Release,
119 IMalloc_Alloc,
120 IMalloc_Realloc,
121 IMalloc_Free,
122 IMalloc_GetSize,
123 IMalloc_DidAlloc,
124 IMalloc_HeapMinimize,
127 LPMALLOC
128 IMalloc_Constructor() {
129 LPMALLOC this;
131 fprintf(stderr,"cloning IMalloc\n");
132 this = (LPMALLOC)HeapAlloc(GetProcessHeap(),0,sizeof(IMalloc));
133 this->lpvtbl = &VT_IMalloc;
134 this->ref = 1;
135 return this;