sxs: Add a stub implementation of IAssemblyName.
This commit is contained in:
parent
cc3d210130
commit
21e5c4c417
|
@ -3,6 +3,7 @@ IMPORTS = oleaut32 ole32
|
|||
|
||||
C_SRCS = \
|
||||
cache.c \
|
||||
name.c \
|
||||
sxs.c
|
||||
|
||||
@MAKE_DLL_RULES@
|
||||
|
|
|
@ -0,0 +1,220 @@
|
|||
/*
|
||||
* IAssemblyName implementation
|
||||
*
|
||||
* Copyright 2012 Hans Leidekker for CodeWeavers
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
#define COBJMACROS
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
#include "ole2.h"
|
||||
#include "winsxs.h"
|
||||
|
||||
#include "wine/debug.h"
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(sxs);
|
||||
|
||||
struct name
|
||||
{
|
||||
IAssemblyName IAssemblyName_iface;
|
||||
LONG refs;
|
||||
};
|
||||
|
||||
static inline struct name *impl_from_IAssemblyName( IAssemblyName *iface )
|
||||
{
|
||||
return CONTAINING_RECORD( iface, struct name, IAssemblyName_iface );
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_QueryInterface(
|
||||
IAssemblyName *iface,
|
||||
REFIID riid,
|
||||
void **obj )
|
||||
{
|
||||
struct name *name = impl_from_IAssemblyName( iface );
|
||||
|
||||
TRACE("%p, %s, %p\n", name, debugstr_guid(riid), obj);
|
||||
|
||||
*obj = NULL;
|
||||
|
||||
if (IsEqualIID( riid, &IID_IUnknown ) ||
|
||||
IsEqualIID( riid, &IID_IAssemblyName ))
|
||||
{
|
||||
IUnknown_AddRef( iface );
|
||||
*obj = name;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
return E_NOINTERFACE;
|
||||
}
|
||||
|
||||
static ULONG WINAPI name_AddRef(
|
||||
IAssemblyName *iface )
|
||||
{
|
||||
struct name *name = impl_from_IAssemblyName( iface );
|
||||
return InterlockedIncrement( &name->refs );
|
||||
}
|
||||
|
||||
static ULONG WINAPI name_Release( IAssemblyName *iface )
|
||||
{
|
||||
struct name *name = impl_from_IAssemblyName( iface );
|
||||
ULONG refs = InterlockedDecrement( &name->refs );
|
||||
|
||||
if (!refs)
|
||||
{
|
||||
TRACE("destroying %p\n", name);
|
||||
HeapFree( GetProcessHeap(), 0, name );
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_SetProperty(
|
||||
IAssemblyName *iface,
|
||||
DWORD id,
|
||||
LPVOID property,
|
||||
DWORD size )
|
||||
{
|
||||
FIXME("%p, %d, %p, %d\n", iface, id, property, size);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_GetProperty(
|
||||
IAssemblyName *iface,
|
||||
DWORD id,
|
||||
LPVOID buffer,
|
||||
LPDWORD buflen )
|
||||
{
|
||||
FIXME("%p, %d, %p, %p\n", iface, id, buffer, buflen);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_Finalize(
|
||||
IAssemblyName *iface )
|
||||
{
|
||||
FIXME("%p\n", iface);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_GetDisplayName(
|
||||
IAssemblyName *iface,
|
||||
LPOLESTR buffer,
|
||||
LPDWORD buflen,
|
||||
DWORD flags )
|
||||
{
|
||||
FIXME("%p, %p, %p, 0x%08x\n", iface, buffer, buflen, flags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_Reserved(
|
||||
IAssemblyName *iface,
|
||||
REFIID riid,
|
||||
IUnknown *pUnkReserved1,
|
||||
IUnknown *pUnkReserved2,
|
||||
LPCOLESTR szReserved,
|
||||
LONGLONG llReserved,
|
||||
LPVOID pvReserved,
|
||||
DWORD cbReserved,
|
||||
LPVOID *ppReserved )
|
||||
{
|
||||
FIXME("%p, %s, %p, %p, %s, %x%08x, %p, %d, %p\n", iface,
|
||||
debugstr_guid(riid), pUnkReserved1, pUnkReserved2,
|
||||
debugstr_w(szReserved), (DWORD)(llReserved >> 32), (DWORD)llReserved,
|
||||
pvReserved, cbReserved, ppReserved);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_GetName(
|
||||
IAssemblyName *iface,
|
||||
LPDWORD buflen,
|
||||
WCHAR *buffer )
|
||||
{
|
||||
FIXME("%p, %p, %p\n", iface, buflen, buffer);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_GetVersion(
|
||||
IAssemblyName *iface,
|
||||
LPDWORD hi,
|
||||
LPDWORD low )
|
||||
{
|
||||
FIXME("%p, %p, %p\n", iface, hi, low);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_IsEqual(
|
||||
IAssemblyName *name1,
|
||||
IAssemblyName *name2,
|
||||
DWORD flags )
|
||||
{
|
||||
FIXME("%p, %p, 0x%08x\n", name1, name2, flags);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI name_Clone(
|
||||
IAssemblyName *iface,
|
||||
IAssemblyName **name )
|
||||
{
|
||||
FIXME("%p, %p\n", iface, name);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
static const IAssemblyNameVtbl name_vtbl =
|
||||
{
|
||||
name_QueryInterface,
|
||||
name_AddRef,
|
||||
name_Release,
|
||||
name_SetProperty,
|
||||
name_GetProperty,
|
||||
name_Finalize,
|
||||
name_GetDisplayName,
|
||||
name_Reserved,
|
||||
name_GetName,
|
||||
name_GetVersion,
|
||||
name_IsEqual,
|
||||
name_Clone
|
||||
};
|
||||
|
||||
/******************************************************************
|
||||
* CreateAssemblyNameObject (SXS.@)
|
||||
*/
|
||||
HRESULT WINAPI CreateAssemblyNameObject(
|
||||
LPASSEMBLYNAME *obj,
|
||||
LPCWSTR assembly,
|
||||
DWORD flags,
|
||||
LPVOID reserved )
|
||||
{
|
||||
struct name *name;
|
||||
|
||||
TRACE("%p, %s, 0x%08x, %p\n", obj, debugstr_w(assembly), flags, reserved);
|
||||
|
||||
if (!obj) return E_INVALIDARG;
|
||||
|
||||
*obj = NULL;
|
||||
if (!assembly || !assembly[0] || flags != CANOF_PARSE_DISPLAY_NAME)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (!(name = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*name) )))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
name->IAssemblyName_iface.lpVtbl = &name_vtbl;
|
||||
name->refs = 1;
|
||||
|
||||
*obj = &name->IAssemblyName_iface;
|
||||
return S_OK;
|
||||
}
|
|
@ -1,2 +1,2 @@
|
|||
@ stdcall CreateAssemblyCache(ptr long)
|
||||
@ stub CreateAssemblyNameObject
|
||||
@ stdcall CreateAssemblyNameObject(ptr wstr long ptr)
|
||||
|
|
|
@ -195,3 +195,4 @@ typedef [public] enum
|
|||
} CREATE_ASM_NAME_OBJ_FLAGS;
|
||||
|
||||
cpp_quote("HRESULT WINAPI CreateAssemblyCache(IAssemblyCache**,DWORD);")
|
||||
cpp_quote("HRESULT WINAPI CreateAssemblyNameObject(LPASSEMBLYNAME *,LPCWSTR,DWORD,LPVOID);")
|
||||
|
|
Loading…
Reference in New Issue