2 * IMetaDataDispenserEx - dynamic creation/editing of assemblies
4 * Copyright 2010 Vincent Povirk for CodeWeavers
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
21 #define WIN32_NO_STATUS
23 #define COM_NO_WINDOWS_H
31 //#include "wine/library.h"
37 //#include "mscoree.h"
39 //#include "cordebug.h"
40 //#include "metahost.h"
41 //#include "wine/list.h"
42 //#include "mscoree_private.h"
44 #include <wine/debug.h>
46 WINE_DEFAULT_DEBUG_CHANNEL( mscoree
);
48 typedef struct MetaDataDispenser
50 IMetaDataDispenserEx IMetaDataDispenserEx_iface
;
54 static inline MetaDataDispenser
*impl_from_IMetaDataDispenserEx(IMetaDataDispenserEx
*iface
)
56 return CONTAINING_RECORD(iface
, MetaDataDispenser
, IMetaDataDispenserEx_iface
);
59 static HRESULT WINAPI
MetaDataDispenser_QueryInterface(IMetaDataDispenserEx
* iface
,
60 REFIID riid
, void **ppvObject
)
62 TRACE("%p %s %p\n", iface
, debugstr_guid(riid
), ppvObject
);
64 if (IsEqualGUID(riid
, &IID_IMetaDataDispenserEx
) ||
65 IsEqualGUID(riid
, &IID_IMetaDataDispenser
) ||
66 IsEqualGUID(riid
, &IID_IUnknown
))
72 FIXME("Unsupported interface %s\n", debugstr_guid(riid
));
76 IMetaDataDispenserEx_AddRef( iface
);
81 static ULONG WINAPI
MetaDataDispenser_AddRef(IMetaDataDispenserEx
* iface
)
83 MetaDataDispenser
*This
= impl_from_IMetaDataDispenserEx(iface
);
84 ULONG ref
= InterlockedIncrement(&This
->ref
);
86 TRACE("%p ref=%u\n", This
, ref
);
91 static ULONG WINAPI
MetaDataDispenser_Release(IMetaDataDispenserEx
* iface
)
93 MetaDataDispenser
*This
= impl_from_IMetaDataDispenserEx(iface
);
94 ULONG ref
= InterlockedDecrement(&This
->ref
);
96 TRACE("%p ref=%u\n", This
, ref
);
100 HeapFree(GetProcessHeap(), 0, This
);
106 static HRESULT WINAPI
MetaDataDispenser_DefineScope(IMetaDataDispenserEx
* iface
,
107 REFCLSID rclsid
, DWORD dwCreateFlags
, REFIID riid
, IUnknown
**ppIUnk
)
109 FIXME("%p %s %x %s %p\n", iface
, debugstr_guid(rclsid
), dwCreateFlags
,
110 debugstr_guid(riid
), ppIUnk
);
114 static HRESULT WINAPI
MetaDataDispenser_OpenScope(IMetaDataDispenserEx
* iface
,
115 LPCWSTR szScope
, DWORD dwOpenFlags
, REFIID riid
, IUnknown
**ppIUnk
)
117 FIXME("%p %s %x %s %p\n", iface
, debugstr_w(szScope
), dwOpenFlags
,
118 debugstr_guid(riid
), ppIUnk
);
122 static HRESULT WINAPI
MetaDataDispenser_OpenScopeOnMemory(IMetaDataDispenserEx
* iface
,
123 const void *pData
, ULONG cbData
, DWORD dwOpenFlags
, REFIID riid
, IUnknown
**ppIUnk
)
125 FIXME("%p %p %u %x %s %p\n", iface
, pData
, cbData
, dwOpenFlags
,
126 debugstr_guid(riid
), ppIUnk
);
130 static HRESULT WINAPI
MetaDataDispenser_SetOption(IMetaDataDispenserEx
* iface
,
131 REFGUID optionid
, const VARIANT
*value
)
133 FIXME("%p %s\n", iface
, debugstr_guid(optionid
));
137 static HRESULT WINAPI
MetaDataDispenser_GetOption(IMetaDataDispenserEx
* iface
,
138 REFGUID optionid
, VARIANT
*pvalue
)
140 FIXME("%p %s\n", iface
, debugstr_guid(optionid
));
144 static HRESULT WINAPI
MetaDataDispenser_OpenScopeOnITypeInfo(IMetaDataDispenserEx
* iface
,
145 ITypeInfo
*pITI
, DWORD dwOpenFlags
, REFIID riid
, IUnknown
**ppIUnk
)
147 FIXME("%p %p %u %s %p\n", iface
, pITI
, dwOpenFlags
, debugstr_guid(riid
), ppIUnk
);
151 static HRESULT WINAPI
MetaDataDispenser_GetCORSystemDirectory(IMetaDataDispenserEx
* iface
,
152 LPWSTR szBuffer
, DWORD cchBuffer
, DWORD
*pchBuffer
)
154 FIXME("%p %p %u %p\n", iface
, szBuffer
, cchBuffer
, pchBuffer
);
158 static HRESULT WINAPI
MetaDataDispenser_FindAssembly(IMetaDataDispenserEx
* iface
,
159 LPCWSTR szAppBase
, LPCWSTR szPrivateBin
, LPCWSTR szGlobalBin
, LPCWSTR szAssemblyName
,
160 LPWSTR szName
, ULONG cchName
, ULONG
*pcName
)
162 FIXME("%p %s %s %s %s %p %u %p\n", iface
, debugstr_w(szAppBase
),
163 debugstr_w(szPrivateBin
), debugstr_w(szGlobalBin
),
164 debugstr_w(szAssemblyName
), szName
, cchName
, pcName
);
168 static HRESULT WINAPI
MetaDataDispenser_FindAssemblyModule(IMetaDataDispenserEx
* iface
,
169 LPCWSTR szAppBase
, LPCWSTR szPrivateBin
, LPCWSTR szGlobalBin
, LPCWSTR szAssemblyName
,
170 LPCWSTR szModuleName
, LPWSTR szName
, ULONG cchName
, ULONG
*pcName
)
172 FIXME("%p %s %s %s %s %s %p %u %p\n", iface
, debugstr_w(szAppBase
),
173 debugstr_w(szPrivateBin
), debugstr_w(szGlobalBin
), debugstr_w(szAssemblyName
),
174 debugstr_w(szModuleName
), szName
, cchName
, pcName
);
178 static const struct IMetaDataDispenserExVtbl MetaDataDispenserVtbl
=
180 MetaDataDispenser_QueryInterface
,
181 MetaDataDispenser_AddRef
,
182 MetaDataDispenser_Release
,
183 MetaDataDispenser_DefineScope
,
184 MetaDataDispenser_OpenScope
,
185 MetaDataDispenser_OpenScopeOnMemory
,
186 MetaDataDispenser_SetOption
,
187 MetaDataDispenser_GetOption
,
188 MetaDataDispenser_OpenScopeOnITypeInfo
,
189 MetaDataDispenser_GetCORSystemDirectory
,
190 MetaDataDispenser_FindAssembly
,
191 MetaDataDispenser_FindAssemblyModule
194 HRESULT
MetaDataDispenser_CreateInstance(IUnknown
**ppUnk
)
196 MetaDataDispenser
*This
;
198 This
= HeapAlloc(GetProcessHeap(), 0, sizeof(MetaDataDispenser
));
201 return E_OUTOFMEMORY
;
203 This
->IMetaDataDispenserEx_iface
.lpVtbl
= &MetaDataDispenserVtbl
;
206 *ppUnk
= (IUnknown
*)This
;