https://git.reactos.org/?p=reactos.git;a=commitdiff;h=9d1dc9bee956672e79d86e...
commit 9d1dc9bee956672e79d86e2867e7ef520fdabba8 Author: Amine Khaldi amine.khaldi@reactos.org AuthorDate: Sun Mar 4 13:15:59 2018 +0100 Commit: Amine Khaldi amine.khaldi@reactos.org CommitDate: Sun Mar 4 13:15:59 2018 +0100
[OLEAUT32_WINETEST] Sync with Wine Staging 3.3. CORE-14434 --- modules/rostests/winetests/oleaut32/dispatch.c | 8 +- modules/rostests/winetests/oleaut32/olefont.c | 20 ++- modules/rostests/winetests/oleaut32/olepicture.c | 183 +++++++++++++++++++++-- modules/rostests/winetests/oleaut32/precomp.h | 2 + modules/rostests/winetests/oleaut32/safearray.c | 137 ++++++++--------- modules/rostests/winetests/oleaut32/tmarshal.c | 86 ++++++++++- modules/rostests/winetests/oleaut32/tmarshal.rc | 10 +- modules/rostests/winetests/oleaut32/typelib.c | 176 +++++++++++++--------- modules/rostests/winetests/oleaut32/usrmarshal.c | 12 +- modules/rostests/winetests/oleaut32/varformat.c | 18 ++- modules/rostests/winetests/oleaut32/vartest.c | 21 ++- modules/rostests/winetests/oleaut32/vartype.c | 12 +- 12 files changed, 510 insertions(+), 175 deletions(-)
diff --git a/modules/rostests/winetests/oleaut32/dispatch.c b/modules/rostests/winetests/oleaut32/dispatch.c index 722488da31..ff63a7d592 100644 --- a/modules/rostests/winetests/oleaut32/dispatch.c +++ b/modules/rostests/winetests/oleaut32/dispatch.c @@ -18,7 +18,13 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define COBJMACROS +#define CONST_VTABLE + +#include <wine/test.h> +#include <windef.h> +#include <winbase.h> +#include <oaidl.h>
static const WCHAR szSunshine[] = {'S','u','n','s','h','i','n','e',0};
diff --git a/modules/rostests/winetests/oleaut32/olefont.c b/modules/rostests/winetests/oleaut32/olefont.c index 9763271208..f9c5625701 100644 --- a/modules/rostests/winetests/oleaut32/olefont.c +++ b/modules/rostests/winetests/oleaut32/olefont.c @@ -20,7 +20,25 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> +#include <math.h> +#include <float.h> + +#define COBJMACROS + +#include <wine/test.h> +#include <windef.h> +#include <winbase.h> +#include <winuser.h> +#include <wingdi.h> +#include <winnls.h> +#include <winerror.h> +#include <winnt.h> +#include <initguid.h> +#include <wtypes.h> +#include <olectl.h> +#include <ocidl.h>
DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
diff --git a/modules/rostests/winetests/oleaut32/olepicture.c b/modules/rostests/winetests/oleaut32/olepicture.c index 149dfc357f..0b5db1d923 100644 --- a/modules/rostests/winetests/oleaut32/olepicture.c +++ b/modules/rostests/winetests/oleaut32/olepicture.c @@ -19,7 +19,28 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> +#include <math.h> +#include <float.h> + +#define COBJMACROS +#define CONST_VTABLE +#define NONAMELESSUNION + +#include "wine/test.h" +#include <windef.h> +#include <winbase.h> +#include <winuser.h> +#include <wingdi.h> +#include <winnls.h> +#include <winerror.h> +#include <winnt.h> + +#include <urlmon.h> +#include <wtypes.h> +#include <olectl.h> +#include <objidl.h>
#define expect_eq(expr, value, type, format) { type ret = (expr); ok((value) == ret, #expr " expected " format " got " format "\n", value, ret); }
@@ -77,7 +98,7 @@ static const unsigned char pngimage[285] = { 0xe7,0x00,0x00,0x00,0x00,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82 };
-/* 1x1 pixel bmp */ +/* 1bpp BI_RGB 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, @@ -86,6 +107,15 @@ static const unsigned char bmpimage[66] = { 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, @@ -219,7 +249,7 @@ test_pic_with_stream(LPSTREAM stream, unsigned int imgsize) { BITMAP bmp; GetObjectA(UlongToHandle(handle), sizeof(BITMAP), &bmp); - todo_wine ok(bmp.bmBits != 0, "not a dib\n"); + ok(bmp.bmBits != 0, "not a dib\n"); }
width = 0; @@ -847,6 +877,7 @@ static void test_OleLoadPicturePath(void) HANDLE file; DWORD size; WCHAR *ptr; + VARIANT var;
const struct { @@ -913,6 +944,14 @@ static void test_OleLoadPicturePath(void) 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 || @@ -921,6 +960,13 @@ static void test_OleLoadPicturePath(void) 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. */ @@ -930,12 +976,26 @@ static void test_OleLoadPicturePath(void) 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); @@ -957,6 +1017,13 @@ static void test_OleLoadPicturePath(void) 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. */ @@ -965,6 +1032,22 @@ static void test_OleLoadPicturePath(void) 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) @@ -1076,18 +1159,14 @@ static void test_load_save_bmp(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; @@ -1154,15 +1233,12 @@ static void test_load_save_icon(void) 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; @@ -1228,13 +1304,11 @@ static void test_load_save_empty_picture(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 == -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); @@ -1302,6 +1376,89 @@ todo_wine 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"); @@ -1317,6 +1474,7 @@ START_TEST(olepicture) 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)); @@ -1341,6 +1499,7 @@ START_TEST(olepicture) test_load_save_bmp(); test_load_save_icon(); test_load_save_empty_picture(); + test_load_save_emf(); }
diff --git a/modules/rostests/winetests/oleaut32/precomp.h b/modules/rostests/winetests/oleaut32/precomp.h index eb417ca71f..6455f83a1c 100644 --- a/modules/rostests/winetests/oleaut32/precomp.h +++ b/modules/rostests/winetests/oleaut32/precomp.h @@ -1,3 +1,4 @@ + #ifndef _OLEAUT32_WINETEST_PRECOMP_H_ #define _OLEAUT32_WINETEST_PRECOMP_H_
@@ -13,6 +14,7 @@
#include <wine/test.h>
+#include <winreg.h> #include <winnls.h> #include <wingdi.h> #include <ole2.h> diff --git a/modules/rostests/winetests/oleaut32/safearray.c b/modules/rostests/winetests/oleaut32/safearray.c index 06dbb269a6..5ff29b3c3e 100644 --- a/modules/rostests/winetests/oleaut32/safearray.c +++ b/modules/rostests/winetests/oleaut32/safearray.c @@ -19,7 +19,25 @@ * */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> +#include <math.h> +#include <float.h> + +#define COBJMACROS +#define CONST_VTABLE +#include "wine/test.h" +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "winnls.h" +#include "winsock2.h" +#include "winerror.h" +#include "winnt.h" + +#include "wtypes.h" +#include "oleauto.h"
#ifndef FADF_CREATEVECTOR const USHORT FADF_CREATEVECTOR = 0x2000; @@ -29,8 +47,6 @@ static HMODULE hOleaut32;
static HRESULT (WINAPI *pSafeArrayAllocDescriptorEx)(VARTYPE,UINT,SAFEARRAY**); static HRESULT (WINAPI *pSafeArrayCopyData)(SAFEARRAY*,SAFEARRAY*); -static HRESULT (WINAPI *pSafeArrayGetIID)(SAFEARRAY*,GUID*); -static HRESULT (WINAPI *pSafeArraySetIID)(SAFEARRAY*,REFGUID); static HRESULT (WINAPI *pSafeArrayGetVartype)(SAFEARRAY*,VARTYPE*); static HRESULT (WINAPI *pSafeArrayGetRecordInfo)(SAFEARRAY*,IRecordInfo**); static SAFEARRAY* (WINAPI *pSafeArrayCreateEx)(VARTYPE,UINT,SAFEARRAYBOUND*,LPVOID); @@ -668,24 +684,22 @@ static void test_safearray(void) hres = SafeArrayDestroyDescriptor(a); ok(hres == S_OK,"SADD with data in array failed with hres %x\n",hres);
- /* IID functions */ - /* init a small stack safearray */ - if (pSafeArraySetIID) { - memset(&b, 0, sizeof(b)); - b.cDims = 1; - memset(&iid, 0x42, sizeof(IID)); - hres = pSafeArraySetIID(&b,&iid); - ok(hres == E_INVALIDARG,"SafeArraySetIID of non IID capable safearray did not return E_INVALIDARG, but %x\n",hres); - - hres = SafeArrayAllocDescriptor(1,&a); - ok(hres == S_OK,"SafeArrayAllocDescriptor should return S_OK, but got %x\n",hres); - ok((a->fFeatures & FADF_HAVEIID) == 0,"newly allocated descriptor with SAAD should not have FADF_HAVEIID\n"); - hres = pSafeArraySetIID(a,&iid); - ok(hres == E_INVALIDARG,"SafeArraySetIID of newly allocated descriptor with SAAD should return E_INVALIDARG, but got %x\n",hres); - - hres = SafeArrayDestroyDescriptor(a); - ok(hres == S_OK,"SADD failed with hres %x\n",hres); - } + /* IID functions */ + /* init a small stack safearray */ + memset(&b, 0, sizeof(b)); + b.cDims = 1; + memset(&iid, 0x42, sizeof(IID)); + hres = SafeArraySetIID(&b, &iid); + ok(hres == E_INVALIDARG, "Unexpected ret value %#x.\n", hres); + + hres = SafeArrayAllocDescriptor(1, &a); + ok(hres == S_OK, "Failed to allocate array descriptor, hr %#x.\n", hres); + ok((a->fFeatures & FADF_HAVEIID) == 0, "Unexpected features mask %#x.\n", a->fFeatures); + hres = SafeArraySetIID(a, &iid); + ok(hres == E_INVALIDARG, "Unexpected ret value %#x.\n", hres); + + hres = SafeArrayDestroyDescriptor(a); + ok(hres == S_OK,"SADD failed with hres %x\n",hres);
if (!pSafeArrayAllocDescriptorEx) return; @@ -696,7 +710,7 @@ static void test_safearray(void) ok(hres == S_OK, "SafeArrayAllocDescriptorEx gave hres 0x%x\n", hres); ok(a->fFeatures == vttypes[i].expflags,"SAADE(%d) resulted with flags %x, expected %x\n", vttypes[i].vt, a->fFeatures, vttypes[i].expflags); if (a->fFeatures & FADF_HAVEIID) { - hres = pSafeArrayGetIID(a, &iid); + hres = SafeArrayGetIID(a, &iid); ok(hres == S_OK,"SAGIID failed for vt %d with hres %x\n", vttypes[i].vt,hres); switch (vttypes[i].vt) { case VT_UNKNOWN: @@ -712,7 +726,7 @@ static void test_safearray(void) break; } } else { - hres = pSafeArrayGetIID(a, &iid); + hres = SafeArrayGetIID(a, &iid); ok(hres == E_INVALIDARG,"SAGIID did not fail for vt %d with hres %x\n", vttypes[i].vt,hres); } if (a->fFeatures & FADF_RECORD) { @@ -733,13 +747,13 @@ static void test_safearray(void) }
if (a->fFeatures & FADF_HAVEIID) { - hres = pSafeArraySetIID(a, &IID_IStorage); /* random IID */ + hres = SafeArraySetIID(a, &IID_IStorage); /* random IID */ ok(hres == S_OK,"SASIID failed with FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); - hres = pSafeArrayGetIID(a, &iid); + hres = SafeArrayGetIID(a, &iid); ok(hres == S_OK,"SAGIID failed with FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); ok(IsEqualGUID(&iid, &IID_IStorage),"returned iid is not IID_IStorage\n"); } else { - hres = pSafeArraySetIID(a, &IID_IStorage); /* random IID */ + hres = SafeArraySetIID(a, &IID_IStorage); /* random IID */ ok(hres == E_INVALIDARG,"SASIID did not failed with !FADF_HAVEIID set for vt %d with %x\n", vttypes[i].vt, hres); } hres = SafeArrayDestroyDescriptor(a); @@ -867,12 +881,8 @@ static void test_SafeArrayCreateLockDestroy(void) { ok((sa->fFeatures & FADF_HAVEIID) == 0, "Non interface type should not have FADF_HAVEIID\n"); - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == E_INVALIDARG, - "Non interface type allowed SetIID(), hres %x\n", hres); - } + hres = SafeArraySetIID(sa, &IID_IUnknown); + ok(hres == E_INVALIDARG, "Unexpected ret value %#x.\n", hres); if (vt != VT_RECORD) { VARTYPE aVt; @@ -890,12 +900,8 @@ static void test_SafeArrayCreateLockDestroy(void) else { ok(sa->fFeatures & FADF_HAVEIID, "Interface type should have FADF_HAVEIID\n"); - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == S_OK, - "Non interface type disallowed SetIID(), hres %x\n", hres); - } + hres = SafeArraySetIID(sa, &IID_IUnknown); + ok(hres == S_OK, "Failed to set array IID, hres %#x.\n", hres); ok((sa->fFeatures & FADF_HAVEVARTYPE) == 0, "Interface type %d should not have FADF_HAVEVARTYPE\n", vt); } @@ -1526,25 +1532,14 @@ static void test_SafeArrayCreateEx(void) if (sa) { GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (ITypeInfo) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_ITypeInfo), "CreateEx (ITypeInfo) bad IID\n"); - } - } - if (pSafeArraySetIID) - { - hres = pSafeArraySetIID(sa, &IID_IUnknown); - ok(hres == S_OK, "Failed to set IID, hres = %8x\n", hres); - if (hres == S_OK && pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK && IsEqualGUID(&guid, &IID_IUnknown), "Set bad IID\n"); - } - } + + hres = SafeArrayGetIID(sa, &guid); + ok(hres == S_OK, "Failed to get array IID, hres %#x.\n", hres); + ok(IsEqualGUID(&guid, &IID_ITypeInfo), "CreateEx (ITypeInfo) bad IID\n"); + hres = SafeArraySetIID(sa, &IID_IUnknown); + ok(hres == S_OK, "Failed to set IID, hres = %8x\n", hres); + hres = SafeArrayGetIID(sa, &guid); + ok(hres == S_OK && IsEqualGUID(&guid, &IID_IUnknown), "Set bad IID\n"); hres = SafeArrayDestroy(sa); ok(hres == S_OK, "got 0x%08x\n", hres); } @@ -1555,15 +1550,10 @@ static void test_SafeArrayCreateEx(void) if (sa) { GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (NULL) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_IDispatch), "CreateEx (NULL) bad IID\n"); - } - } + + hres = SafeArrayGetIID(sa, &guid); + ok(hres == S_OK, "Failed to get array IID, hres %#x.\n", hres); + ok(IsEqualGUID(&guid, &IID_IDispatch), "CreateEx (NULL) bad IID\n"); hres = SafeArrayDestroy(sa); ok(hres == S_OK, "got 0x%08x\n", hres); } @@ -1574,15 +1564,10 @@ static void test_SafeArrayCreateEx(void) if (sa) { GUID guid; - if (pSafeArrayGetIID) - { - hres = pSafeArrayGetIID(sa, &guid); - ok(hres == S_OK, "CreateEx (NULL-Unk) no IID hres 0x%x\n", hres); - if (hres == S_OK) - { - ok(IsEqualGUID(&guid, &IID_IUnknown), "CreateEx (NULL-Unk) bad IID\n"); - } - } + + hres = SafeArrayGetIID(sa, &guid); + ok(hres == S_OK, "Failed to get array IID, hres %#x.\n", hres); + ok(IsEqualGUID(&guid, &IID_IUnknown), "CreateEx (NULL-Unk) bad IID\n"); hres = SafeArrayDestroy(sa); ok(hres == S_OK, "got 0x%08x\n", hres); } @@ -2107,8 +2092,6 @@ START_TEST(safearray)
GETPTR(SafeArrayAllocDescriptorEx); GETPTR(SafeArrayCopyData); - GETPTR(SafeArrayGetIID); - GETPTR(SafeArraySetIID); GETPTR(SafeArrayGetVartype); GETPTR(SafeArrayCreateEx); GETPTR(SafeArrayCreateVector); diff --git a/modules/rostests/winetests/oleaut32/tmarshal.c b/modules/rostests/winetests/oleaut32/tmarshal.c index ad29d95780..4bd172e796 100644 --- a/modules/rostests/winetests/oleaut32/tmarshal.c +++ b/modules/rostests/winetests/oleaut32/tmarshal.c @@ -17,8 +17,16 @@ * */
-#include "precomp.h" +#define COBJMACROS +#define CONST_VTABLE
+#include <windows.h> +#include <ocidl.h> +#include <stdio.h> + +#include "wine/test.h" + +#include "tmarshal.h" #include "tmarshal_dispids.h"
static HRESULT (WINAPI *pVarAdd)(LPVARIANT,LPVARIANT,LPVARIANT); @@ -26,6 +34,12 @@ static HRESULT (WINAPI *pVarAdd)(LPVARIANT,LPVARIANT,LPVARIANT);
#define ok_ole_success(hr, func) ok(hr == S_OK, #func " failed with error 0x%08x\n", hr)
+#ifdef __i386__ +static const int tmarshal_todo = 0; +#else +static const int tmarshal_todo = 1; +#endif + /* ULL suffix is not portable */ #define ULL_CONST(dw1, dw2) ((((ULONGLONG)dw1) << 32) | (ULONGLONG)dw2)
@@ -1297,6 +1311,7 @@ static void test_typelibmarshal(void)
IStream_Seek(pStream, ullZero, STREAM_SEEK_SET, NULL); hr = CoUnmarshalInterface(pStream, &IID_IKindaEnumWidget, (void **)&pKEW); + todo_wine_if(tmarshal_todo) ok_ole_success(hr, CoUnmarshalInterface); IStream_Release(pStream);
@@ -1323,6 +1338,7 @@ static void test_typelibmarshal(void) VariantInit(&varresult); hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYPUT, &dispparams, &varresult, &excepinfo, NULL); ok_ole_success(hr, IDispatch_Invoke); + todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1342,6 +1358,7 @@ static void test_typelibmarshal(void) VariantInit(&varresult); hr = IDispatch_Invoke(pDispatch, DISPID_TM_NAME, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); ok_ole_success(hr, IDispatch_Invoke); + todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1355,7 +1372,7 @@ static void test_typelibmarshal(void) ok(!lstrcmpW(bstr, szCat), "IWidget_get_Name should have returned string "Cat" instead of %s\n", wine_dbgstr_w(bstr)); SysFreeString(bstr);
- /* call DoSomething */ + /* call DoSomething without optional arguments */ VariantInit(&vararg[0]); VariantInit(&vararg[1]); V_VT(&vararg[1]) = VT_R8; @@ -1370,6 +1387,43 @@ static void test_typelibmarshal(void) 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; @@ -1473,6 +1527,7 @@ static void test_typelibmarshal(void) hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONEDISPATCH, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); ok_ole_success(hr, IDispatch_Invoke);
+ todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1490,6 +1545,7 @@ static void test_typelibmarshal(void) hr = IDispatch_Invoke(pDispatch, DISPID_TM_CLONECOCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); ok_ole_success(hr, IDispatch_Invoke);
+ todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1505,11 +1561,16 @@ static void test_typelibmarshal(void) dispparams.rgvarg = vararg; VariantInit(&varresult); hr = IDispatch_Invoke(pDispatch, DISPID_TM_COCLASS, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); - todo_wine ok_ole_success(hr, IDispatch_Invoke); + ok_ole_success(hr, IDispatch_Invoke); + todo_wine_if(tmarshal_todo) 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 */ @@ -1525,6 +1586,7 @@ static void test_typelibmarshal(void) hr = IDispatch_Invoke(pDispatch, DISPID_VALUE, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_PROPERTYGET, &dispparams, &varresult, &excepinfo, NULL); ok_ole_success(hr, IDispatch_Invoke);
+ todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == S_OK, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1580,9 +1642,9 @@ static void test_typelibmarshal(void) V_I4(&vararg[1]) = 2; hr = IWidget_VariantCArray(pWidget, 2, vararg); ok_ole_success(hr, IWidget_VariantCArray); - todo_wine + todo_wine_if(!tmarshal_todo) ok(V_VT(&vararg[0]) == VT_I4 && V_I4(&vararg[0]) == 2, "vararg[0] = %d[%d]\n", V_VT(&vararg[0]), V_I4(&vararg[0])); - todo_wine + todo_wine_if(!tmarshal_todo) ok(V_VT(&vararg[1]) == VT_I4 && V_I4(&vararg[1]) == 3, "vararg[1] = %d[%d]\n", V_VT(&vararg[1]), V_I4(&vararg[1]));
/* call VarArg */ @@ -1653,6 +1715,7 @@ static void test_typelibmarshal(void) VariantInit(&varresult); hr = IDispatch_Invoke(pDispatch, DISPID_TM_ERROR, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, &excepinfo, NULL); ok(hr == DISP_E_EXCEPTION, "IDispatch_Invoke should have returned DISP_E_EXCEPTION instead of 0x%08x\n", hr); + todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == E_NOTIMPL, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1679,6 +1742,7 @@ static void test_typelibmarshal(void) hr = ITypeInfo_Invoke(pTypeInfo, &NonOleAutomation, DISPID_NOA_ERROR, DISPATCH_METHOD, &dispparams, &varresult, &excepinfo, NULL); ok(hr == DISP_E_EXCEPTION, "ITypeInfo_Invoke should have returned DISP_E_EXCEPTION instead of 0x%08x\n", hr); ok(V_VT(&varresult) == VT_EMPTY, "V_VT(&varresult) should be VT_EMPTY instead of %d\n", V_VT(&varresult)); + todo_wine_if(tmarshal_todo) ok(excepinfo.wCode == 0x0 && excepinfo.scode == E_NOTIMPL, "EXCEPINFO differs from expected: wCode = 0x%x, scode = 0x%08x\n", excepinfo.wCode, excepinfo.scode); @@ -1990,6 +2054,7 @@ static void test_external_connection(void)
IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoUnmarshalInterface(stream, &IID_ItestDual, (void**)&iface); + todo_wine_if(tmarshal_todo) ok(hres == S_OK, "CoUnmarshalInterface failed: %08x\n", hres); ok(external_connections == 1, "external_connections = %d\n", external_connections);
@@ -1998,6 +2063,7 @@ static void test_external_connection(void)
/* Creating a stub for new iface causes new external connection. */ hres = ItestDual_QueryInterface(iface, &IID_ITestSecondDisp, (void**)&second); + todo_wine_if(tmarshal_todo) ok(hres == S_OK, "Could not get ITestSecondDisp iface: %08x\n", hres); todo_wine ok(external_connections == 2, "external_connections = %d\n", external_connections); @@ -2009,6 +2075,7 @@ static void test_external_connection(void)
expect_last_release_closes = TRUE; ItestDual_Release(iface); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections);
end_host_object(tid, thread); @@ -2020,12 +2087,14 @@ static void test_external_connection(void) expect_last_release_closes = FALSE; hres = CoMarshalInterface(stream, &IID_ItestDual, (IUnknown*)&TestDual, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok(hres == S_OK, "CoMarshalInterface failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 1, "external_connections = %d\n", external_connections);
expect_last_release_closes = TRUE; IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoReleaseMarshalData(stream); ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections);
/* Two separated marshal data are still one external connection. */ @@ -2036,21 +2105,25 @@ static void test_external_connection(void) IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoMarshalInterface(stream, &IID_ItestDual, (IUnknown*)&TestDual, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok(hres == S_OK, "CoMarshalInterface failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 1, "external_connections = %d\n", external_connections);
hres = CoMarshalInterface(stream2, &IID_ItestDual, (IUnknown*)&TestDual, MSHCTX_INPROC, NULL, MSHLFLAGS_NORMAL); ok(hres == S_OK, "CoMarshalInterface failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 1, "external_connections = %d\n", external_connections);
IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoReleaseMarshalData(stream); ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 1, "external_connections = %d\n", external_connections);
expect_last_release_closes = TRUE; IStream_Seek(stream2, zero, STREAM_SEEK_SET, NULL); hres = CoReleaseMarshalData(stream2); ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections);
IStream_Release(stream); @@ -2062,17 +2135,20 @@ static void test_external_connection(void)
hres = CoMarshalInterface(stream, &IID_ItestDual, (IUnknown*)&TestDual, MSHCTX_INPROC, NULL, MSHLFLAGS_TABLEWEAK); ok(hres == S_OK, "CoMarshalInterface failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections);
IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoUnmarshalInterface(stream, &IID_ItestDual, (void**)&iface); ok(hres == S_OK, "CoUnmarshalInterface failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections); ItestDual_Release(iface);
IStream_Seek(stream, zero, STREAM_SEEK_SET, NULL); hres = CoReleaseMarshalData(stream); ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); + todo_wine_if(tmarshal_todo) ok(external_connections == 0, "external_connections = %d\n", external_connections);
IStream_Release(stream); diff --git a/modules/rostests/winetests/oleaut32/tmarshal.rc b/modules/rostests/winetests/oleaut32/tmarshal.rc index f514e8e9b8..cbb3b18959 100644 --- a/modules/rostests/winetests/oleaut32/tmarshal.rc +++ b/modules/rostests/winetests/oleaut32/tmarshal.rc @@ -18,14 +18,14 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include <windef.h> -//#include "winbase.h" -//#include "winuser.h" -//#include "winnls.h" +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "winnls.h"
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
-#include <wine/wine_common_ver.rc> +#include "wine/wine_common_ver.rc"
/* @makedep: tmarshal.tlb */ 1 TYPELIB tmarshal.tlb diff --git a/modules/rostests/winetests/oleaut32/typelib.c b/modules/rostests/winetests/oleaut32/typelib.c index 5f7e599a5d..354b4b017c 100644 --- a/modules/rostests/winetests/oleaut32/typelib.c +++ b/modules/rostests/winetests/oleaut32/typelib.c @@ -19,10 +19,28 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define NONAMELESSSTRUCT +#define NONAMELESSUNION
-#include <winreg.h> -#include <test_reg.h> +#define COBJMACROS +#define CONST_VTABLE + +#include <wine/test.h> +#include <stdarg.h> +#include <stdio.h> +#include <assert.h> + +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "oleauto.h" +#include "ocidl.h" +#include "shlwapi.h" +#include "tmarshal.h" +#include "olectl.h" + +#include "test_reg.h" +#include "test_tlb.h"
#define expect_eq(expr, value, type, format) { type _ret = (expr); ok((value) == _ret, #expr " expected " format " got " format "\n", value, _ret); } #define expect_int(expr, value) expect_eq(expr, (int)(value), int, "%d") @@ -1181,11 +1199,41 @@ static HRESULT WINAPI ret_false_func(void) return S_FALSE; }
-static const void *vtable[] = { NULL, NULL, NULL, inst_func }; +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 void test_DispCallFunc(void) { - const void **inst = vtable; + void **inst; HRESULT res; VARIANT result, args[5]; VARIANTARG *pargs[5]; @@ -1194,6 +1242,30 @@ static void test_DispCallFunc(void)
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; @@ -1292,6 +1364,7 @@ static void test_DispCallFunc(void) 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) ); @@ -1999,8 +2072,7 @@ static void test_CreateTypeLib(SYSKIND sys) {
hres = ITypeInfo_GetTypeAttr(ti, &typeattr); ok(hres == S_OK, "got %08x\n", hres); - ok(typeattr->cbSizeVft == 3 * ptr_size || broken(sys == SYS_WIN32 && typeattr->cbSizeVft == 24) /* xp64 */, - "retrieved IUnknown gave wrong cbSizeVft: %u\n", typeattr->cbSizeVft); + ok(typeattr->cbSizeVft == 3 * ptr_size, "retrieved IUnknown gave wrong cbSizeVft: %u\n", typeattr->cbSizeVft); ITypeInfo_ReleaseTypeAttr(ti, typeattr);
ITypeInfo_Release(ti); @@ -2043,8 +2115,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 3 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 24) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 3 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_BSTR, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2103,8 +2174,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 4 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 28) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 4 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2146,8 +2216,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 4 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 28), /* xp64 */ - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 4 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2177,8 +2246,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 7 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 40) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 7 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2209,8 +2277,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 7 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 40) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 7 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2245,8 +2312,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 6 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 36) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 6 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2286,8 +2352,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 6 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 36) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 6 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2340,8 +2405,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 6 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 36) /* xp64 */, - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 6 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2398,8 +2462,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 8 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 44), /* xp64 */ - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 8 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2442,8 +2505,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 9 * ptr_size || broken(sys == SYS_WIN32 && pfuncdesc->oVft == 48), /* xp64 */ - "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 9 * ptr_size, "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VARIANT, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -2762,8 +2824,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(typeattr->cFuncs == 1, "cFuncs = %d\n", typeattr->cFuncs); ok(typeattr->cVars == 0, "cVars = %d\n", typeattr->cVars); ok(typeattr->cImplTypes == 1, "cImplTypes = %d\n", typeattr->cImplTypes); - ok(typeattr->cbSizeVft == 8 * ptr_size || broken(sys == SYS_WIN32 && typeattr->cbSizeVft == 7 * sizeof(void *) + 4), /* xp64 */ - "cbSizeVft = %d\n", typeattr->cbSizeVft); + ok(typeattr->cbSizeVft == 8 * ptr_size, "cbSizeVft = %d\n", typeattr->cbSizeVft); ok(typeattr->cbAlignment == 4, "cbAlignment = %d\n", typeattr->cbAlignment); ok(typeattr->wTypeFlags == (TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL), "wTypeFlags = %d\n", typeattr->wTypeFlags); ok(typeattr->wMajorVerNum == 0, "wMajorVerNum = %d\n", typeattr->wMajorVerNum); @@ -2807,8 +2868,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(typeattr->cFuncs == 13, "cFuncs = %d\n", typeattr->cFuncs); ok(typeattr->cVars == 0, "cVars = %d\n", typeattr->cVars); ok(typeattr->cImplTypes == 1, "cImplTypes = %d\n", typeattr->cImplTypes); - ok(typeattr->cbSizeVft == 16 * ptr_size || broken(sys == SYS_WIN32 && typeattr->cbSizeVft == 3 * sizeof(void *) + 52), /* xp64 */ - "cbSizeVft = %d\n", typeattr->cbSizeVft); + ok(typeattr->cbSizeVft == 16 * ptr_size, "cbSizeVft = %d\n", typeattr->cbSizeVft); ok(typeattr->cbAlignment == 4, "cbAlignment = %d\n", typeattr->cbAlignment); ok(typeattr->wTypeFlags == 0, "wTypeFlags = %d\n", typeattr->wTypeFlags); ok(typeattr->wMajorVerNum == 0, "wMajorVerNum = %d\n", typeattr->wMajorVerNum); @@ -3082,8 +3142,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 4 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 4 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3107,8 +3166,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 5 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 5 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3132,8 +3190,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 6 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 6 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3192,8 +3249,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 7 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 7 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3239,8 +3295,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 8 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 8 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3277,8 +3332,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 9 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 9 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VARIANT, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3315,8 +3369,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 2, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 10 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 10 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3356,8 +3409,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 11 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 11 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3392,8 +3444,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 0, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 12 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 12 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_BSTR, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3424,8 +3475,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 13 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 13 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3458,8 +3508,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 14 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 14 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3490,8 +3539,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(pfuncdesc->oVft == 15 * sizeof(void*), "got %d\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == 15 * sizeof(void*), "got %d\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3552,8 +3600,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 0xffffaaa8 || - pfuncdesc->oVft == 0x5550, "got %x\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == (short)(0xaaa8 * sizeof(void *) / ptr_size), "got %x\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3585,9 +3632,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(pfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", pfuncdesc->callconv); ok(pfuncdesc->cParams == 1, "got %d\n", pfuncdesc->cParams); ok(pfuncdesc->cParamsOpt == 0, "got %d\n", pfuncdesc->cParamsOpt); - ok(pfuncdesc->oVft == 0xffffaaac || - pfuncdesc->oVft == 0xffffaab0 || - pfuncdesc->oVft == 0x5558, "got %x\n", pfuncdesc->oVft); + ok(pfuncdesc->oVft == (short)((sys == SYS_WIN64 ? 0xaab0 : 0xaaac) * sizeof(void *) / ptr_size), "got %x\n", pfuncdesc->oVft); ok(pfuncdesc->cScodes == 0, "got %d\n", pfuncdesc->cScodes); ok(pfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", pfuncdesc->elemdescFunc.tdesc.vt); ok(pfuncdesc->wFuncFlags == 0, "got 0x%x\n", pfuncdesc->wFuncFlags); @@ -3723,8 +3768,7 @@ static void test_CreateTypeLib(SYSKIND sys) { ok(bindptr.lpfuncdesc->callconv == CC_STDCALL, "got 0x%x\n", bindptr.lpfuncdesc->callconv); ok(bindptr.lpfuncdesc->cParams == 8, "got %d\n", bindptr.lpfuncdesc->cParams); ok(bindptr.lpfuncdesc->cParamsOpt == 0, "got %d\n", bindptr.lpfuncdesc->cParamsOpt); - todo_wine_if(is_win64 && sys == SYS_WIN32) - ok(bindptr.lpfuncdesc->oVft == 6 * sizeof(void*), "got %x\n", bindptr.lpfuncdesc->oVft); + ok(bindptr.lpfuncdesc->oVft == 6 * sizeof(void*), "got %x\n", bindptr.lpfuncdesc->oVft); ok(bindptr.lpfuncdesc->cScodes == 0, "got %d\n", bindptr.lpfuncdesc->cScodes); ok(bindptr.lpfuncdesc->elemdescFunc.tdesc.vt == VT_VOID, "got %d\n", bindptr.lpfuncdesc->elemdescFunc.tdesc.vt); ok(bindptr.lpfuncdesc->wFuncFlags == FUNCFLAG_FRESTRICTED, "got 0x%x\n", bindptr.lpfuncdesc->wFuncFlags); @@ -4780,9 +4824,7 @@ todo_wine /* widl generates broken typelib and typeattr just reflects that */ expect_int(desc->callconv, fn_info->callconv); expect_int(desc->cParams, fn_info->cParams); expect_int(desc->cParamsOpt, fn_info->cParamsOpt); - ok( desc->oVft == fn_info->vtbl_index * sizeof(void*) || - broken(desc->oVft == fn_info->vtbl_index * 4), /* xp64 */ - "desc->oVft got %u\n", desc->oVft ); + expect_int(desc->oVft, fn_info->vtbl_index * sizeof(void*)); expect_int(desc->cScodes, fn_info->cScodes); expect_int(desc->wFuncFlags, fn_info->wFuncFlags); ole_check(ITypeInfo_GetNames(typeinfo, desc->memid, namesTab, 256, &cNames)); @@ -5933,9 +5975,7 @@ static void testTDA(ITypeLib *tl, struct _TDATest *TDATest, #endif }
- ok(typeattr->cbSizeInstance == size || - broken(TDATest->vt == VT_VARIANT && ptr_size != sizeof(void*) && typeattr->cbSizeInstance == sizeof(VARIANT)) /* winxp64 */, - "got wrong size for VT %u: 0x%x\n", TDATest->vt, typeattr->cbSizeInstance); + ok(typeattr->cbSizeInstance == size, "got wrong size for VT %u: 0x%x\n", TDATest->vt, typeattr->cbSizeInstance); ok(typeattr->cbAlignment == alignment, "got wrong alignment for VT %u: 0x%x\n", TDATest->vt, typeattr->cbAlignment); ok(typeattr->tdescAlias.vt == TDATest->vt, "got wrong VT for VT %u: 0x%x\n", TDATest->vt, typeattr->tdescAlias.vt);
diff --git a/modules/rostests/winetests/oleaut32/usrmarshal.c b/modules/rostests/winetests/oleaut32/usrmarshal.c index d570842a4e..b9478d1b69 100644 --- a/modules/rostests/winetests/oleaut32/usrmarshal.c +++ b/modules/rostests/winetests/oleaut32/usrmarshal.c @@ -18,7 +18,17 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define COBJMACROS +#define CONST_VTABLE + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "objbase.h" +#include "propidl.h" /* for LPSAFEARRAY_User* routines */ + +#include "wine/test.h"
#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION) # define V_U2(A) ((A)->n1.n2) diff --git a/modules/rostests/winetests/oleaut32/varformat.c b/modules/rostests/winetests/oleaut32/varformat.c index 78faa277e4..69476aa5d3 100644 --- a/modules/rostests/winetests/oleaut32/varformat.c +++ b/modules/rostests/winetests/oleaut32/varformat.c @@ -19,7 +19,23 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#include <stdarg.h> +#include <stdio.h> +#include <math.h> +#include <float.h> + +#include "windef.h" +#include "winbase.h" +#include "winsock2.h" +#include "wine/test.h" +#include "winuser.h" +#include "wingdi.h" +#include "winnls.h" +#include "winerror.h" +#include "winnt.h" + +#include "wtypes.h" +#include "oleauto.h"
static HMODULE hOleaut32;
diff --git a/modules/rostests/winetests/oleaut32/vartest.c b/modules/rostests/winetests/oleaut32/vartest.c index 0d0d76012e..429ffbbb2e 100644 --- a/modules/rostests/winetests/oleaut32/vartest.c +++ b/modules/rostests/winetests/oleaut32/vartest.c @@ -19,10 +19,27 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" - +#include <stdarg.h> +#include <stdio.h> +#include <math.h> #include <float.h>
+#define COBJMACROS +#define CONST_VTABLE + +#include "windef.h" +#include "winbase.h" +#include "winsock2.h" +#include "wine/test.h" +#include "winuser.h" +#include "wingdi.h" +#include "winnls.h" +#include "winerror.h" +#include "winnt.h" + +#include "wtypes.h" +#include "oleauto.h" + static HMODULE hOleaut32;
static HRESULT (WINAPI *pVarUdateFromDate)(DATE,ULONG,UDATE*); diff --git a/modules/rostests/winetests/oleaut32/vartype.c b/modules/rostests/winetests/oleaut32/vartype.c index a831393858..9be2eb2901 100644 --- a/modules/rostests/winetests/oleaut32/vartype.c +++ b/modules/rostests/winetests/oleaut32/vartype.c @@ -18,9 +18,16 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
-#include "precomp.h" +#define CONST_VTABLE +#define COBJMACROS
-#include <initguid.h> +#include "wine/test.h" +#include "oleauto.h" +#include <math.h> +#include <stdio.h> +#include "test_tlb.h" + +#include "initguid.h"
DEFINE_GUID(UUID_test_struct, 0x4029f190, 0xca4a, 0x4611, 0xae,0xb9,0x67,0x39,0x83,0xcb,0x96,0xdd);
@@ -6067,6 +6074,7 @@ static void test_recinfo(void) IRecordInfo_Release(recinfo);
ITypeInfo_Release(typeinfo); + ITypeLib_Release(typelib2); ITypeLib_Release(typelib); DeleteFileW(filenameW); DeleteFileW(filename2W);