oleaut32/tests: Add another test for calling a varargs method.
This time with passing SAFEARRAY as a reference.
This commit is contained in:
parent
7d1e3691ab
commit
232f54aea2
|
@ -874,6 +874,41 @@ static HRESULT WINAPI Widget_VarArg_Run(
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI Widget_VarArg_Ref_Run(
|
||||||
|
IWidget *iface, BSTR name, SAFEARRAY **params, VARIANT *result)
|
||||||
|
{
|
||||||
|
static const WCHAR catW[] = { 'C','a','t',0 };
|
||||||
|
static const WCHAR supermanW[] = { 'S','u','p','e','r','m','a','n',0 };
|
||||||
|
LONG bound;
|
||||||
|
VARIANT *var;
|
||||||
|
BSTR bstr;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
trace("VarArg_Ref_Run(%p,%p,%p)\n", name, params, result);
|
||||||
|
|
||||||
|
ok(!lstrcmpW(name, catW), "got %s\n", wine_dbgstr_w(name));
|
||||||
|
|
||||||
|
hr = SafeArrayGetLBound(*params, 1, &bound);
|
||||||
|
ok(hr == S_OK, "SafeArrayGetLBound error %#x\n", hr);
|
||||||
|
ok(bound == 0, "expected 0, got %d\n", bound);
|
||||||
|
|
||||||
|
hr = SafeArrayGetUBound(*params, 1, &bound);
|
||||||
|
ok(hr == S_OK, "SafeArrayGetUBound error %#x\n", hr);
|
||||||
|
ok(bound == 0, "expected 0, got %d\n", bound);
|
||||||
|
|
||||||
|
hr = SafeArrayAccessData(*params, (void **)&var);
|
||||||
|
ok(hr == S_OK, "SafeArrayAccessData error %#x\n", hr);
|
||||||
|
|
||||||
|
ok(V_VT(&var[0]) == VT_BSTR, "expected VT_BSTR, got %d\n", V_VT(&var[0]));
|
||||||
|
bstr = V_BSTR(&var[0]);
|
||||||
|
ok(!lstrcmpW(bstr, supermanW), "got %s\n", wine_dbgstr_w(bstr));
|
||||||
|
|
||||||
|
hr = SafeArrayUnaccessData(*params);
|
||||||
|
ok(hr == S_OK, "SafeArrayUnaccessData error %#x\n", hr);
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static const struct IWidgetVtbl Widget_VTable =
|
static const struct IWidgetVtbl Widget_VTable =
|
||||||
{
|
{
|
||||||
Widget_QueryInterface,
|
Widget_QueryInterface,
|
||||||
|
@ -912,7 +947,8 @@ static const struct IWidgetVtbl Widget_VTable =
|
||||||
Widget_put_prop_req_arg,
|
Widget_put_prop_req_arg,
|
||||||
Widget_pos_restrict,
|
Widget_pos_restrict,
|
||||||
Widget_neg_restrict,
|
Widget_neg_restrict,
|
||||||
Widget_VarArg_Run
|
Widget_VarArg_Run,
|
||||||
|
Widget_VarArg_Ref_Run
|
||||||
};
|
};
|
||||||
|
|
||||||
static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject)
|
static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject)
|
||||||
|
@ -1554,6 +1590,23 @@ static void test_typelibmarshal(void)
|
||||||
SysFreeString(V_BSTR(&vararg[1]));
|
SysFreeString(V_BSTR(&vararg[1]));
|
||||||
SysFreeString(V_BSTR(&vararg[0]));
|
SysFreeString(V_BSTR(&vararg[0]));
|
||||||
|
|
||||||
|
/* call VarArg_Ref_Run */
|
||||||
|
VariantInit(&vararg[1]);
|
||||||
|
V_VT(&vararg[1]) = VT_BSTR;
|
||||||
|
V_BSTR(&vararg[1]) = SysAllocString(szCat);
|
||||||
|
VariantInit(&vararg[0]);
|
||||||
|
V_VT(&vararg[0]) = VT_BSTR;
|
||||||
|
V_BSTR(&vararg[0]) = SysAllocString(szSuperman);
|
||||||
|
dispparams.cNamedArgs = 0;
|
||||||
|
dispparams.cArgs = 2;
|
||||||
|
dispparams.rgdispidNamedArgs = NULL;
|
||||||
|
dispparams.rgvarg = vararg;
|
||||||
|
hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG_REF_RUN, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL);
|
||||||
|
todo_wine
|
||||||
|
ok_ole_success(hr, IDispatch_Invoke);
|
||||||
|
SysFreeString(V_BSTR(&vararg[1]));
|
||||||
|
SysFreeString(V_BSTR(&vararg[0]));
|
||||||
|
|
||||||
/* call Error */
|
/* call Error */
|
||||||
dispparams.cNamedArgs = 0;
|
dispparams.cNamedArgs = 0;
|
||||||
dispparams.cArgs = 0;
|
dispparams.cArgs = 0;
|
||||||
|
|
|
@ -182,6 +182,9 @@ library TestTypelib
|
||||||
|
|
||||||
[id(DISPID_TM_VARARG_RUN), vararg]
|
[id(DISPID_TM_VARARG_RUN), vararg]
|
||||||
HRESULT VarArg_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) params, [out, retval] VARIANT *result);
|
HRESULT VarArg_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) params, [out, retval] VARIANT *result);
|
||||||
|
|
||||||
|
[id(DISPID_TM_VARARG_REF_RUN), vararg]
|
||||||
|
HRESULT VarArg_Ref_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) *params, [out, retval] VARIANT *result);
|
||||||
}
|
}
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#define DISPID_TM_NEG_RESTRICTED -26
|
#define DISPID_TM_NEG_RESTRICTED -26
|
||||||
#define DISPID_TM_TESTSECONDIFACE 27
|
#define DISPID_TM_TESTSECONDIFACE 27
|
||||||
#define DISPID_TM_VARARG_RUN 28
|
#define DISPID_TM_VARARG_RUN 28
|
||||||
|
#define DISPID_TM_VARARG_REF_RUN 29
|
||||||
|
|
||||||
#define DISPID_NOA_BSTRRET 1
|
#define DISPID_NOA_BSTRRET 1
|
||||||
#define DISPID_NOA_ERROR 2
|
#define DISPID_NOA_ERROR 2
|
||||||
|
|
Loading…
Reference in New Issue