Required for Iragon: Prologue.
Signed-off-by: Zhiyi Zhang zzhang@codeweavers.com --- dlls/wintypes/main.c | 172 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+)
diff --git a/dlls/wintypes/main.c b/dlls/wintypes/main.c index d85a395d45c..ab48ce667b9 100644 --- a/dlls/wintypes/main.c +++ b/dlls/wintypes/main.c @@ -28,6 +28,9 @@
#include "activation.h"
+#define WIDL_using_Windows_Foundation_Metadata +#include "windows.foundation.metadata.h" + WINE_DEFAULT_DEBUG_CHANNEL(wintypes);
static const char *debugstr_hstring(HSTRING hstr) @@ -43,6 +46,7 @@ static const char *debugstr_hstring(HSTRING hstr) struct wintypes { IActivationFactory IActivationFactory_iface; + IApiInformationStatics IApiInformationStatics_iface; LONG ref; };
@@ -51,9 +55,16 @@ static inline struct wintypes *impl_from_IActivationFactory(IActivationFactory * return CONTAINING_RECORD(iface, struct wintypes, IActivationFactory_iface); }
+static inline struct wintypes *impl_from_IApiInformationStatics(IApiInformationStatics *iface) +{ + return CONTAINING_RECORD(iface, struct wintypes, IApiInformationStatics_iface); +} + static HRESULT STDMETHODCALLTYPE wintypes_QueryInterface(IActivationFactory *iface, REFIID iid, void **out) { + struct wintypes *impl = impl_from_IActivationFactory(iface); + TRACE("iface %p, iid %s, out %p stub!\n", iface, debugstr_guid(iid), out);
if (IsEqualGUID(iid, &IID_IUnknown) @@ -66,6 +77,13 @@ static HRESULT STDMETHODCALLTYPE wintypes_QueryInterface(IActivationFactory *ifa return S_OK; }
+ if (IsEqualGUID(iid, &IID_IApiInformationStatics)) + { + IUnknown_AddRef(iface); + *out = &impl->IApiInformationStatics_iface; + return S_OK; + } + FIXME("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(iid)); *out = NULL; return E_NOINTERFACE; @@ -128,9 +146,163 @@ static const struct IActivationFactoryVtbl activation_factory_vtbl = wintypes_ActivateInstance, };
+static HRESULT STDMETHODCALLTYPE api_information_statics_QueryInterface( + IApiInformationStatics *iface, REFIID iid, void **out) +{ + struct wintypes *impl = impl_from_IApiInformationStatics(iface); + return wintypes_QueryInterface(&impl->IActivationFactory_iface, iid, out); +} + +static ULONG STDMETHODCALLTYPE api_information_statics_AddRef( + IApiInformationStatics *iface) +{ + struct wintypes *impl = impl_from_IApiInformationStatics(iface); + return wintypes_AddRef(&impl->IActivationFactory_iface); +} + +static ULONG STDMETHODCALLTYPE api_information_statics_Release( + IApiInformationStatics *iface) +{ + struct wintypes *impl = impl_from_IApiInformationStatics(iface); + return wintypes_Release(&impl->IActivationFactory_iface); +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_GetIids( + IApiInformationStatics *iface, ULONG *iid_count, IID **iids) +{ + FIXME("iface %p, iid_count %p, iids %p stub!\n", iface, iid_count, iids); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_GetRuntimeClassName( + IApiInformationStatics *iface, HSTRING *class_name) +{ + FIXME("iface %p, class_name %p stub!\n", iface, class_name); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_GetTrustLevel( + IApiInformationStatics *iface, TrustLevel *trust_level) +{ + FIXME("iface %p, trust_level %p stub!\n", iface, trust_level); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsTypePresent( + IApiInformationStatics *iface, HSTRING type_name, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, value %p stub!\n", iface, debugstr_hstring(type_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsMethodPresent( + IApiInformationStatics *iface, HSTRING type_name, HSTRING method_name, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, method_name %s, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(method_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsMethodPresentWithArity( + IApiInformationStatics *iface, HSTRING type_name, HSTRING method_name, + UINT32 parameter_count, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, method_name %s, parameter_count %u, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(method_name), parameter_count, value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsEventPresent( + IApiInformationStatics *iface, HSTRING type_name, HSTRING event_name, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, event_name %s, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(event_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsPropertyPresent( + IApiInformationStatics *iface, HSTRING type_name, HSTRING property_name, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, property_name %s, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(property_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsReadOnlyPropertyPresent( + IApiInformationStatics *iface, HSTRING type_name, HSTRING property_name, + BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, property_name %s, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(property_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsWriteablePropertyPresent( + IApiInformationStatics *iface, HSTRING type_name, HSTRING property_name, BOOLEAN *value) +{ + FIXME("iface %p, type_name %s, property_name %s, value %p stub!\n", iface, + debugstr_hstring(type_name), debugstr_hstring(property_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsEnumNamedValuePresent( + IApiInformationStatics *iface, HSTRING enum_type_name, HSTRING value_name, BOOLEAN *value) +{ + FIXME("iface %p, enum_type_name %s, value_name %s, value %p stub!\n", iface, + debugstr_hstring(enum_type_name), debugstr_hstring(value_name), value); + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsApiContractPresentByMajor( + IApiInformationStatics *iface, HSTRING contract_name, UINT16 major_version, BOOLEAN *value) +{ + FIXME("iface %p, contract_name %s, major_version %u, value %p stub!\n", iface, + debugstr_hstring(contract_name), major_version, value); + + if (value) + { + *value = FALSE; + return S_OK; + } + + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE api_information_statics_IsApiContractPresentByMajorAndMinor( + IApiInformationStatics *iface, HSTRING contract_name, UINT16 major_version, + UINT16 minor_version, BOOLEAN *value) +{ + FIXME("iface %p, contract_name %s, major_version %u, minor_version %u, value %p stub!\n", iface, + debugstr_hstring(contract_name), major_version, minor_version, value); + return E_NOTIMPL; +} + +static const struct IApiInformationStaticsVtbl api_information_statics_vtbl = +{ + api_information_statics_QueryInterface, + api_information_statics_AddRef, + api_information_statics_Release, + /* IInspectable methods */ + api_information_statics_GetIids, + api_information_statics_GetRuntimeClassName, + api_information_statics_GetTrustLevel, + /* IApiInformationStatics methods */ + api_information_statics_IsTypePresent, + api_information_statics_IsMethodPresent, + api_information_statics_IsMethodPresentWithArity, + api_information_statics_IsEventPresent, + api_information_statics_IsPropertyPresent, + api_information_statics_IsReadOnlyPropertyPresent, + api_information_statics_IsWriteablePropertyPresent, + api_information_statics_IsEnumNamedValuePresent, + api_information_statics_IsApiContractPresentByMajor, + api_information_statics_IsApiContractPresentByMajorAndMinor +}; + static struct wintypes wintypes = { {&activation_factory_vtbl}, + {&api_information_statics_vtbl}, 1 };
On 4/21/22 05:37, Zhiyi Zhang wrote:
+static HRESULT STDMETHODCALLTYPE api_information_statics_IsApiContractPresentByMajor(
IApiInformationStatics *iface, HSTRING contract_name, UINT16 major_version, BOOLEAN *value)
+{
- FIXME("iface %p, contract_name %s, major_version %u, value %p stub!\n", iface,
debugstr_hstring(contract_name), major_version, value);
- if (value)
- {
*value = FALSE;
return S_OK;
- }
- return E_NOTIMPL;
+}
I find it weird to have a mix of E_NOTIMPL / non-error result, especially when it only depend on the pointer validity.
IMHO the patch should only stub the method, returning E_NOTIMPL, and then another patch with a small test should check whether value can be NULL, and semi-stub it to always return FALSE / S_OK.