0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
};
-/* 1bpp BI_RGB 1x1 pixel bmp */
+/* 1x1 pixel bmp */
static const unsigned char bmpimage[66] = {
0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,0x00,0x00,
0x00,0x00
};
-/* 8bpp BI_RLE8 1x1 pixel bmp */
-static const unsigned char bmpimage_rle8[] = {
-0x42,0x4d,0x42,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x00,0x00,0x00,0x28,0x00,
-0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x01,0x00,
-0x00,0x00,0x04,0x00,0x00,0x00,0x12,0x0b,0x00,0x00,0x12,0x0b,0x00,0x00,0x02,0x00,
-0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0x00,0xff,0xff,0xff,0x00,0x00,0x01,
-0x00,0x00
-};
-
/* 2x2 pixel gif */
static const unsigned char gif4pixel[42] = {
0x47,0x49,0x46,0x38,0x37,0x61,0x02,0x00,0x02,0x00,0xa1,0x00,0x00,0x00,0x00,0x00,
{
BITMAP bmp;
GetObjectA(UlongToHandle(handle), sizeof(BITMAP), &bmp);
- ok(bmp.bmBits != 0, "not a dib\n");
+ todo_wine ok(bmp.bmBits != 0, "not a dib\n");
}
width = 0;
HDC hdc = create_render_dc();
/* test IPicture::Render return code on uninitialized picture */
- OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic);
+ hres = OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void **)&pic);
+ ok(hres == S_OK, "Failed to create a picture, hr %#x.\n", hres);
hres = IPicture_get_Type(pic, &type);
ok(hres == S_OK, "IPicture_get_Type does not return S_OK, but 0x%08x\n", hres);
ok(type == PICTYPE_UNINITIALIZED, "Expected type = PICTYPE_UNINITIALIZED, got = %d\n", type);
return;
}
- OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (VOID**)&pic);
+ hres = OleCreatePictureIndirect(&desc, &IID_IPicture, TRUE, (void **)&pic);
+ ok(hres == S_OK, "Failed to create a picture, hr %#x.\n", hres);
/* zero dimensions, PICTYPE_ICON */
hres = picture_render(pic, hdc, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
ole_expect(hres, CTL_E_INVALIDPROPERTYVALUE);
short type;
DWORD attr;
- OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic);
+ hres = OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void **)&pic);
+ ok(hres == S_OK, "Failed to create a picture, hr %#x.\n", hres);
hres = IPicture_get_Type(pic, &type);
ok(hres == S_OK, "IPicture_get_Type does not return S_OK, but 0x%08x\n", hres);
ok(type == PICTYPE_UNINITIALIZED, "Expected type = PICTYPE_UNINITIALIZED, got = %d\n", type);
IPicture *pic;
HRESULT hres;
- OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic);
-
+ hres = OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void **)&pic);
+ ok(hres == S_OK, "Failed to create a picture, hr %#x.\n", hres);
hres = IPicture_get_Handle(pic, NULL);
ole_expect(hres, E_POINTER);
IPicture *pic;
HRESULT hres;
- OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (VOID**)&pic);
+ hres = OleCreatePictureIndirect(NULL, &IID_IPicture, TRUE, (void **)&pic);
+ ok(hres == S_OK, "Failed to create a picture, hr %#x.\n", hres);
hres = IPicture_get_Type(pic, NULL);
ole_expect(hres, E_POINTER);
HANDLE file;
DWORD size;
WCHAR *ptr;
- VARIANT var;
const struct
{
if (pic)
IPicture_Release(pic);
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW + 8);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == S_OK, "OleLoadPictureFile error %#x\n", hres);
- IPicture_Release(pic);
- VariantClear(&var);
-
/* Try a DOS path with tacked on "file:". */
hres = OleLoadPicturePath(temp_fileW, NULL, 0, 0, &IID_IPicture, (void **)&pic);
ok(hres == S_OK ||
if (pic)
IPicture_Release(pic);
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_PATHFILEACCESSERROR, "wrong error %#x\n", hres);
- VariantClear(&var);
-
DeleteFileA(temp_file);
/* Try with a nonexistent file. */
broken(hres == E_FAIL), /*Win2k */
"Expected OleLoadPicturePath to return INET_E_RESOURCE_NOT_FOUND, got 0x%08x\n", hres);
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW + 8);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_FILENOTFOUND, "wrong error %#x\n", hres);
- VariantClear(&var);
-
hres = OleLoadPicturePath(temp_fileW, NULL, 0, 0, &IID_IPicture, (void **)&pic);
ok(hres == INET_E_RESOURCE_NOT_FOUND || /* XP+ */
broken(hres == E_UNEXPECTED) || /* NT4 */
broken(hres == E_FAIL), /* Win2k */
"Expected OleLoadPicturePath to return INET_E_RESOURCE_NOT_FOUND, got 0x%08x\n", hres);
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_PATHFILEACCESSERROR, "wrong error %#x\n", hres);
- VariantClear(&var);
-
file = CreateFileA(temp_file, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(file, bmpimage, sizeof(bmpimage), &size, NULL);
if (pic)
IPicture_Release(pic);
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_PATHFILEACCESSERROR, "wrong error %#x\n", hres);
- VariantClear(&var);
-
DeleteFileA(temp_file);
/* Try with a nonexistent file. */
broken(hres == E_UNEXPECTED) || /* NT4 */
broken(hres == E_FAIL), /* Win2k */
"Expected OleLoadPicturePath to return INET_E_RESOURCE_NOT_FOUND, got 0x%08x\n", hres);
-
- VariantInit(&var);
- V_VT(&var) = VT_BSTR;
- V_BSTR(&var) = SysAllocString(temp_fileW);
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_PATHFILEACCESSERROR, "wrong error %#x\n", hres);
- VariantClear(&var);
-
- VariantInit(&var);
- V_VT(&var) = VT_INT;
- V_INT(&var) = 762;
- hres = OleLoadPictureFile(var, (IDispatch **)&pic);
- ok(hres == CTL_E_FILENOTFOUND, "wrong error %#x\n", hres);
-
-if (0) /* crashes under Windows */
- hres = OleLoadPictureFile(var, NULL);
}
static void test_himetric(void)
size = -1;
hr = IPicture_SaveAsFile(pic, dst_stream, TRUE, &size);
ok(hr == S_OK, "IPicture_SaveasFile error %#x\n", hr);
+todo_wine
ok(size == 66, "expected 66, got %d\n", size);
mem = GlobalLock(hmem);
+todo_wine
ok(!memcmp(&mem[0], "BM", 2), "got wrong bmp header %04x\n", mem[0]);
GlobalUnlock(hmem);
size = -1;
hr = IPicture_SaveAsFile(pic, dst_stream, FALSE, &size);
+todo_wine
ok(hr == E_FAIL, "expected E_FAIL, got %#x\n", hr);
+todo_wine
ok(size == -1, "expected -1, got %d\n", size);
offset.QuadPart = 0;
todo_wine
ok(size == 766, "expected 766, got %d\n", size);
mem = GlobalLock(hmem);
+todo_wine
ok(mem[0] == 0x00010000, "got wrong icon header %04x\n", mem[0]);
GlobalUnlock(hmem);
size = -1;
hr = IPicture_SaveAsFile(pic, dst_stream, FALSE, &size);
+todo_wine
ok(hr == E_FAIL, "expected E_FAIL, got %#x\n", hr);
+todo_wine
ok(size == -1, "expected -1, got %d\n", size);
offset.QuadPart = 0;
size = -1;
hr = IPicture_SaveAsFile(pic, dst_stream, TRUE, &size);
ok(hr == S_OK, "IPicture_SaveasFile error %#x\n", hr);
+todo_wine
ok(size == -1, "expected -1, got %d\n", size);
size = -1;
hr = IPicture_SaveAsFile(pic, dst_stream, FALSE, &size);
ok(hr == S_OK, "IPicture_SaveasFile error %#x\n", hr);
+todo_wine
ok(size == -1, "expected -1, got %d\n", size);
hr = IPicture_QueryInterface(pic, &IID_IPersistStream, (void **)&src_stream);
IStream_Release(stream);
}
-static void test_load_save_emf(void)
-{
- HDC hdc;
- IPicture *pic;
- PICTDESC desc;
- short type;
- OLE_HANDLE handle;
- HGLOBAL hmem;
- DWORD *mem;
- ENHMETAHEADER *emh;
- IPersistStream *src_stream;
- IStream *dst_stream;
- LARGE_INTEGER offset;
- HRESULT hr;
- LONG size;
-
- hdc = CreateEnhMetaFileA(0, NULL, NULL, NULL);
- ok(hdc != 0, "CreateEnhMetaFileA failed\n");
-
- desc.cbSizeofstruct = sizeof(desc);
- desc.picType = PICTYPE_ENHMETAFILE;
- desc.emf.hemf = CloseEnhMetaFile(hdc);
- ok(desc.emf.hemf != 0, "CloseEnhMetaFile failed\n");
- hr = OleCreatePictureIndirect(&desc, &IID_IPicture, FALSE, (void**)&pic);
- ok(hr == S_OK, "OleCreatePictureIndirect error %#x\n", hr);
-
- type = -1;
- hr = IPicture_get_Type(pic, &type);
- ok(hr == S_OK,"get_Type error %#8x\n", hr);
- ok(type == PICTYPE_ENHMETAFILE,"expected PICTYPE_ENHMETAFILE, got %d\n", type);
-
- hr = IPicture_get_Handle(pic, &handle);
- ok(hr == S_OK,"get_Handle error %#8x\n", hr);
- ok(IntToPtr(handle) == desc.emf.hemf, "get_Handle returned wrong handle %#x\n", handle);
-
- hmem = GlobalAlloc(GMEM_MOVEABLE, 0);
- hr = CreateStreamOnHGlobal(hmem, FALSE, &dst_stream);
- ok(hr == S_OK, "createstreamonhglobal error %#x\n", hr);
-
- size = -1;
- hr = IPicture_SaveAsFile(pic, dst_stream, TRUE, &size);
- ok(hr == S_OK, "IPicture_SaveasFile error %#x\n", hr);
- ok(size == 128, "expected 128, got %d\n", size);
- emh = GlobalLock(hmem);
-if (size)
-{
- ok(emh->iType == EMR_HEADER, "wrong iType %04x\n", emh->iType);
- ok(emh->dSignature == ENHMETA_SIGNATURE, "wrong dSignature %08x\n", emh->dSignature);
-}
- GlobalUnlock(hmem);
-
- size = -1;
- hr = IPicture_SaveAsFile(pic, dst_stream, FALSE, &size);
- ok(hr == E_FAIL, "expected E_FAIL, got %#x\n", hr);
- ok(size == -1, "expected -1, got %d\n", size);
-
- offset.QuadPart = 0;
- hr = IStream_Seek(dst_stream, offset, SEEK_SET, NULL);
- ok(hr == S_OK, "IStream_Seek %#x\n", hr);
-
- hr = IPicture_QueryInterface(pic, &IID_IPersistStream, (void **)&src_stream);
- ok(hr == S_OK, "QueryInterface error %#x\n", hr);
-
- hr = IPersistStream_Save(src_stream, dst_stream, TRUE);
- ok(hr == S_OK, "Save error %#x\n", hr);
-
- IPersistStream_Release(src_stream);
- IStream_Release(dst_stream);
-
- mem = GlobalLock(hmem);
- ok(!memcmp(mem, "lt\0\0", 4), "got wrong stream header %04x\n", mem[0]);
- ok(mem[1] == 128, "expected 128, got %u\n", mem[1]);
- emh = (ENHMETAHEADER *)(mem + 2);
- ok(emh->iType == EMR_HEADER, "wrong iType %04x\n", emh->iType);
- ok(emh->dSignature == ENHMETA_SIGNATURE, "wrong dSignature %08x\n", emh->dSignature);
-
- GlobalUnlock(hmem);
- GlobalFree(hmem);
-
- DeleteEnhMetaFile(desc.emf.hemf);
- IPicture_Release(pic);
-}
-
START_TEST(olepicture)
{
hOleaut32 = GetModuleHandleA("oleaut32.dll");
test_pic(gifimage, sizeof(gifimage));
test_pic(jpgimage, sizeof(jpgimage));
test_pic(bmpimage, sizeof(bmpimage));
- test_pic(bmpimage_rle8, sizeof(bmpimage_rle8));
test_pic(gif4pixel, sizeof(gif4pixel));
/* FIXME: No PNG support in Windows... */
if (0) test_pic(pngimage, sizeof(pngimage));
test_load_save_bmp();
test_load_save_icon();
test_load_save_empty_picture();
- test_load_save_emf();
}
ok(!lstrcmpW(bstr, szCat), "IWidget_get_Name should have returned string \"Cat\" instead of %s\n", wine_dbgstr_w(bstr));
SysFreeString(bstr);
- /* call DoSomething without optional arguments */
+ /* call DoSomething */
VariantInit(&vararg[0]);
VariantInit(&vararg[1]);
V_VT(&vararg[1]) = VT_R8;
ok(V_VT(&varresult) == VT_EMPTY, "varresult should be VT_EMPTY\n");
VariantClear(&varresult);
- /* call DoSomething with optional argument set to VT_EMPTY */
- VariantInit(&vararg[0]);
- VariantInit(&vararg[1]);
- VariantInit(&vararg[2]);
- V_VT(&vararg[2]) = VT_R8;
- V_R8(&vararg[2]) = 3.141;
- dispparams.cNamedArgs = 0;
- dispparams.cArgs = 3;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.rgvarg = vararg;
- VariantInit(&varresult);
- hr = IDispatch_Invoke(pDispatch, DISPID_TM_DOSOMETHING, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL);
- ok_ole_success(hr, IDispatch_Invoke);
- ok(V_VT(&varresult) == VT_EMPTY, "varresult should be VT_EMPTY\n");
- VariantClear(&varresult);
-
- /* call DoSomething with optional arguments set to VT_ERROR/DISP_E_PARAMNOTFOUND */
- VariantInit(&vararg[0]);
- VariantInit(&vararg[1]);
- VariantInit(&vararg[2]);
- VariantInit(&vararg[3]);
- V_VT(&vararg[3]) = VT_R8;
- V_R8(&vararg[3]) = 3.141;
- V_VT(&vararg[1]) = VT_ERROR;
- V_ERROR(&vararg[1]) = DISP_E_PARAMNOTFOUND;
- V_VT(&vararg[0]) = VT_ERROR;
- V_ERROR(&vararg[0]) = DISP_E_PARAMNOTFOUND;
- dispparams.cNamedArgs = 0;
- dispparams.cArgs = 4;
- dispparams.rgdispidNamedArgs = NULL;
- dispparams.rgvarg = vararg;
- VariantInit(&varresult);
- hr = IDispatch_Invoke(pDispatch, DISPID_TM_DOSOMETHING, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL);
- ok_ole_success(hr, IDispatch_Invoke);
- ok(V_VT(&varresult) == VT_EMPTY, "varresult should be VT_EMPTY\n");
- VariantClear(&varresult);
-
/* call get_State */
dispparams.cNamedArgs = 0;
dispparams.cArgs = 0;
dispparams.rgvarg = vararg;
VariantInit(&varresult);
hr = IDispatch_Invoke(pDispatch, DISPID_TM_COCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL);
- ok_ole_success(hr, IDispatch_Invoke);
+ todo_wine ok_ole_success(hr, IDispatch_Invoke);
ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK,
"EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n",
excepinfo.wCode, excepinfo.scode);
VariantClear(&varresult);
-
- /* call CoClass (direct) */
- hr = IWidget_Coclass(pWidget, (void *)V_DISPATCH(&vararg[0]));
- ok_ole_success(hr, IWidget_Coclass);
VariantClear(&vararg[0]);
/* call Value with a VT_VARIANT|VT_BYREF type */
todo_wine
ok(external_connections == 2, "external_connections = %d\n", external_connections);
- ITestSecondDisp_Release(second);
+ if (hres == S_OK)
+ ITestSecondDisp_Release(second);
todo_wine
ok(external_connections == 2, "external_connections = %d\n", external_connections);
static const BOOL is_win64 = sizeof(void *) > sizeof(int);
+#ifdef __i386__
+static const BOOL abi_supports_stdcall = TRUE;
+#else
+static const BOOL abi_supports_stdcall = FALSE;
+#endif
+
+static HRESULT WINAPI collection_QueryInterface(ICollection *iface, REFIID riid, void **ret)
+{
+ if (IsEqualIID(riid, &IID_IUnknown) ||
+ IsEqualIID(riid, &IID_IDispatch) ||
+ IsEqualIID(riid, &IID_ICollection))
+ {
+ *ret = iface;
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI collection_AddRef(ICollection *iface)
+{
+ return 2;
+}
+
+static ULONG WINAPI collection_Release(ICollection *iface)
+{
+ return 1;
+}
+
+static HRESULT WINAPI collection_GetTypeInfoCount(ICollection *iface, UINT *cnt)
+{
+ ok(0, "unexpected call\n");
+ *cnt = 0;
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI collection_GetTypeInfo(ICollection *iface, UINT index, LCID lcid, ITypeInfo **ti)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI collection_GetIDsOfNames(ICollection *iface, REFIID riid, LPOLESTR *names,
+ UINT cnt, LCID lcid, DISPID *dispid)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI collection_Invoke(ICollection *iface, DISPID dispid, REFIID riid,
+ LCID lcid, WORD flags, DISPPARAMS *dispparams, VARIANT *res, EXCEPINFO *ei, UINT *argerr)
+{
+ if(dispid != DISPID_VALUE) {
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+ }
+
+ ok(flags == (DISPATCH_METHOD|DISPATCH_PROPERTYGET), "flags = %x\n", flags);
+ ok(dispparams != NULL, "dispparams == NULL\n");
+ ok(!dispparams->rgdispidNamedArgs, "dispparams->rgdispidNamedArgs != NULL\n");
+ ok(dispparams->cArgs == 1, "dispparams->cArgs = %d\n", dispparams->cArgs);
+ ok(!dispparams->cNamedArgs, "dispparams->cNamedArgs = %d\n", dispparams->cNamedArgs);
+ ok(V_VT(dispparams->rgvarg) == VT_I4, "V_VT(dispparams->rgvarg) = %d\n", V_VT(dispparams->rgvarg));
+ ok(V_I4(dispparams->rgvarg) == 7, "V_I4(dispparams->rgvarg) = %d\n", V_I4(dispparams->rgvarg));
+ ok(res != NULL, "res == NULL\n");
+ ok(V_VT(res) == VT_EMPTY, "V_VT(res) = %d\n", V_VT(res));
+
+ V_VT(res) = VT_I4;
+ V_I4(res) = 15;
+ return S_OK;
+}
+
+static HRESULT WINAPI collection_Item(ICollection *iface, int i, int *p)
+{
+ ok(0, "unexpected call\n");
+ return E_NOTIMPL;
+}
+
+static const ICollectionVtbl collectionvtbl = {
+ collection_QueryInterface,
+ collection_AddRef,
+ collection_Release,
+ collection_GetTypeInfoCount,
+ collection_GetTypeInfo,
+ collection_GetIDsOfNames,
+ collection_Invoke,
+ collection_Item
+};
+
+static ICollection collection = { &collectionvtbl };
+
static HRESULT WINAPI invoketest_QueryInterface(IInvokeTest *iface, REFIID riid, void **ret)
{
if (IsEqualIID(riid, &IID_IUnknown) ||
return S_OK;
}
+static HRESULT WINAPI invoketest_testget(IInvokeTest *iface, ICollection **p)
+{
+ *p = &collection;
+ ICollection_AddRef(&collection);
+ return S_OK;
+}
+
static const IInvokeTestVtbl invoketestvtbl = {
invoketest_QueryInterface,
invoketest_AddRef,
invoketest_get_test,
invoketest_putref_testprop,
invoketest_putref_testprop2,
- invoketest_testfunc
+ invoketest_testfunc,
+ invoketest_testget
};
static IInvokeTest invoketest = { &invoketestvtbl };
ok(V_VT(&res) == VT_I4, "got %d\n", V_VT(&res));
ok(V_I4(&res) == 1, "got %d\n", V_I4(&res));
+ /* call propget with DISPATCH_METHOD|DISPATCH_PROPERTYGET flags */
+ V_VT(&args[0]) = VT_I4;
+ V_I4(&args[0]) = 7;
+
+ dispparams.cArgs = 1;
+ dispparams.rgvarg = args;
+
+ i = 0;
+ V_VT(&res) = VT_EMPTY;
+ V_I4(&res) = 0;
+ hr = ITypeInfo_Invoke(pTypeInfo, &invoketest, 4, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &dispparams, &res, NULL, &i);
+ ok(hr == S_OK, "got 0x%08x, %d\n", hr, i);
+ ok(V_VT(&res) == VT_I4, "got %d\n", V_VT(&res));
+ ok(V_I4(&res) == 15, "got %d\n", V_I4(&res));
+
+
/* DISPATCH_PROPERTYPUTREF */
l = 1;
V_VT(&args[0]) = VT_I4|VT_BYREF;
return S_FALSE;
}
-static const WCHAR testW[] = { 'T','e','s','t',0 };
-
-static void WINAPI variant_func2(VARIANT *ret, VARIANT v1, VARIANT v2)
-{
- ok(V_VT(&v1) == VT_I4, "unexpected %d\n", V_VT(&v1));
- ok(V_I4(&v1) == 2, "unexpected %d\n", V_I4(&v1));
- ok(V_VT(&v2) == VT_BSTR, "unexpected %d\n", V_VT(&v2));
- ok(lstrcmpW(V_BSTR(&v2), testW) == 0, "unexpected %s\n", wine_dbgstr_w(V_BSTR(&v2)));
-
- V_VT(ret) = VT_UI4;
- V_I4(ret) = 4321;
-}
-
-static void WINAPI inst_func2(void *inst, VARIANT *ret, VARIANT v1, VARIANT v2)
-{
- ok( (*(void ***)inst)[3] == inst_func2, "wrong ptr %p\n", inst );
-
- ok(V_VT(ret) == VT_I4 || broken(V_VT(ret) == VT_VARIANT) /* win64 */, "unexpected %d\n", V_VT(ret));
- ok(V_I4(ret) == 1234, "unexpected %d\n", V_I4(ret));
-
- ok(V_VT(&v1) == VT_I4, "unexpected %d\n", V_VT(&v1));
- ok(V_I4(&v1) == 2, "unexpected %d\n", V_I4(&v1));
- ok(V_VT(&v2) == VT_BSTR, "unexpected %d\n", V_VT(&v2));
- ok(lstrcmpW(V_BSTR(&v2), testW) == 0, "unexpected %s\n", wine_dbgstr_w(V_BSTR(&v2)));
-
- V_VT(ret) = VT_UI4;
- V_I4(ret) = 4321;
-}
-
-static void *vtable[] = { NULL, NULL, NULL, inst_func };
-static void *vtable2[] = { NULL, NULL, NULL, inst_func2 };
+static const void *vtable[] = { NULL, NULL, NULL, inst_func };
static void test_DispCallFunc(void)
{
- void **inst;
+ const void **inst = vtable;
HRESULT res;
VARIANT result, args[5];
VARIANTARG *pargs[5];
for (i = 0; i < 5; i++) pargs[i] = &args[i];
- memset( args, 0x55, sizeof(args) );
-
- types[0] = VT_VARIANT;
- V_VT(&args[0]) = VT_I4;
- V_I4(&args[0]) = 2;
- types[1] = VT_VARIANT;
- V_VT(&args[1]) = VT_BSTR;
- V_BSTR(&args[1]) = SysAllocString(testW);
- memset( &result, 0xcc, sizeof(result) );
- res = DispCallFunc(NULL, (ULONG_PTR)variant_func2, CC_STDCALL, VT_VARIANT, 2, types, pargs, &result);
- ok(res == S_OK, "DispCallFunc error %#x\n", res);
- ok(V_VT(&result) == VT_UI4, "wrong result type %d\n", V_VT(&result));
- ok(V_UI4(&result) == 4321, "wrong result %u\n", V_UI4(&result));
-
- V_VT(&result) = VT_I4;
- V_UI4(&result) = 1234;
- inst = vtable2;
- res = DispCallFunc(&inst, 3 * sizeof(void *), CC_STDCALL, VT_VARIANT, 2, types, pargs, &result);
- ok(res == S_OK, "DispCallFunc error %#x\n", res);
- ok(V_VT(&result) == VT_UI4, "wrong result type %d\n", V_VT(&result));
- ok(V_UI4(&result) == 4321, "wrong result %u\n", V_UI4(&result));
-
- VariantClear(&args[1]);
-
memset( args, 0x55, sizeof(args) );
types[0] = VT_UI4;
V_UI4(&args[0]) = 1;
ok( V_UI4(&result) == 4321, "wrong result %u\n", V_UI4(&result) );
/* the function checks the argument sizes for stdcall */
- if (!is_win64) /* no stdcall on 64-bit */
+ if (abi_supports_stdcall)
{
res = DispCallFunc( NULL, (ULONG_PTR)stdcall_func, CC_STDCALL, VT_UI4, 0, types, pargs, &result );
ok( res == DISP_E_BADCALLEE, "DispCallFunc wrong error %x\n", res );
types[0] = VT_I4;
V_I4(&args[0]) = 3;
memset( &result, 0xcc, sizeof(result) );
- inst = vtable;
res = DispCallFunc( &inst, 3 * sizeof(void*), CC_STDCALL, VT_I4, 1, types, pargs, &result );
ok( res == S_OK, "DispCallFunc failed %x\n", res );
ok( V_VT(&result) == VT_I4, "wrong result type %d\n", V_VT(&result) );
{
TYPEKIND kind;
WORD flags;
- } attrs[13] =
+ } attrs[] =
{
{ TKIND_INTERFACE, 0 },
{ TKIND_INTERFACE, TYPEFLAG_FDISPATCHABLE },
{ TKIND_DISPATCH, TYPEFLAG_FDISPATCHABLE },
{ TKIND_DISPATCH, TYPEFLAG_FDISPATCHABLE },
{ TKIND_INTERFACE, TYPEFLAG_FDISPATCHABLE },
+ { TKIND_INTERFACE, TYPEFLAG_FDISPATCHABLE },
{ TKIND_RECORD, 0 }
};
ok(hr == S_OK, "got %08x\n", hr);
count = ITypeLib_GetTypeInfoCount(typelib);
- ok(count == 13, "got %d\n", count);
+ ok(count == 14, "got %d\n", count);
for(i = 0; i < count; i++)
{