ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
November 2015
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
14 participants
457 discussions
Start a n
N
ew thread
[akhaldi] 69924: [PSDK] Add missing BCRYPT_HASH_HANDLE.
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 16:15:10 2015 New Revision: 69924 URL:
http://svn.reactos.org/svn/reactos?rev=69924&view=rev
Log: [PSDK] Add missing BCRYPT_HASH_HANDLE. Modified: trunk/reactos/include/psdk/bcrypt.h Modified: trunk/reactos/include/psdk/bcrypt.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/bcrypt.h?rev=…
============================================================================== --- trunk/reactos/include/psdk/bcrypt.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/bcrypt.h [iso-8859-1] Tue Nov 17 16:15:10 2015 @@ -49,6 +49,7 @@ typedef PVOID BCRYPT_ALG_HANDLE; typedef PVOID BCRYPT_HANDLE; +typedef PVOID BCRYPT_HASH_HANDLE; #define BCRYPT_RNG_USE_ENTROPY_IN_BUFFER 0x00000001 #define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002
9 years, 1 month
1
0
0
0
[tfaber] 69923: [USER32_DYNAMIC_APITEST] - Add a test that uses LoadLibrary/FreeLibrary on user32.dll, causing it to re-initialize. CORE-10540
by tfaber@svn.reactos.org
Author: tfaber Date: Tue Nov 17 13:45:59 2015 New Revision: 69923 URL:
http://svn.reactos.org/svn/reactos?rev=69923&view=rev
Log: [USER32_DYNAMIC_APITEST] - Add a test that uses LoadLibrary/FreeLibrary on user32.dll, causing it to re-initialize. CORE-10540 Added: trunk/rostests/apitests/user32_dynamic/ (with props) trunk/rostests/apitests/user32_dynamic/CMakeLists.txt (with props) trunk/rostests/apitests/user32_dynamic/load.c (with props) trunk/rostests/apitests/user32_dynamic/testlist.c (with props) Modified: trunk/rostests/apitests/CMakeLists.txt Modified: trunk/rostests/apitests/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/CMakeLists.txt?r…
============================================================================== --- trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] (original) +++ trunk/rostests/apitests/CMakeLists.txt [iso-8859-1] Tue Nov 17 13:45:59 2015 @@ -22,6 +22,7 @@ add_subdirectory(shell32) add_subdirectory(psapi) add_subdirectory(user32) +add_subdirectory(user32_dynamic) if(NOT ARCH STREQUAL "amd64") add_subdirectory(w32kdll) add_subdirectory(w32knapi) Propchange: trunk/rostests/apitests/user32_dynamic/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Tue Nov 17 13:45:59 2015 @@ -0,0 +1 @@ +((CORE|ROSTESTS|ROSAPPS)-\d+)(,? ?((CORE|ROSTESTS|ROSAPPS)-\d+))*(,? ?(and |or )?((CORE|ROSTESTS|ROSAPPS)-\d+))? Propchange: trunk/rostests/apitests/user32_dynamic/ ------------------------------------------------------------------------------ bugtraq:message = See issue %BUGID% for more details. Propchange: trunk/rostests/apitests/user32_dynamic/ ------------------------------------------------------------------------------ bugtraq:url =
https://jira.reactos.org/browse/%BUGID%
Added: trunk/rostests/apitests/user32_dynamic/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32_dynamic/C…
============================================================================== --- trunk/rostests/apitests/user32_dynamic/CMakeLists.txt (added) +++ trunk/rostests/apitests/user32_dynamic/CMakeLists.txt [iso-8859-1] Tue Nov 17 13:45:59 2015 @@ -0,0 +1,5 @@ + +add_executable(user32_dynamic_apitest load.c testlist.c) +set_module_type(user32_dynamic_apitest win32cui) +add_importlibs(user32_dynamic_apitest msvcrt kernel32) +add_cd_file(TARGET user32_dynamic_apitest DESTINATION reactos/bin FOR all) Propchange: trunk/rostests/apitests/user32_dynamic/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/apitests/user32_dynamic/load.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32_dynamic/l…
============================================================================== --- trunk/rostests/apitests/user32_dynamic/load.c (added) +++ trunk/rostests/apitests/user32_dynamic/load.c [iso-8859-1] Tue Nov 17 13:45:59 2015 @@ -0,0 +1,49 @@ +/* + * PROJECT: ReactOS API tests + * LICENSE: LGPLv2.1+ - See COPYING.LIB in the top level directory + * PURPOSE: Test for loading/unloading user32.dll + * PROGRAMMERS: Thomas Faber <thomas.faber(a)reactos.org> + */ + +#include <apitest.h> + +START_TEST(load) +{ + HMODULE hUser32; + HMODULE hUser32_2; + BOOL Ret; + DWORD Error; + + SetLastError(12345); + hUser32 = LoadLibraryW(L"user32"); + Error = GetLastError(); + ok(hUser32 != NULL, "LoadLibrary failed\n"); + ok(Error != 12345, "Error = %lu\n", Error); + + SetLastError(12345); + hUser32_2 = LoadLibraryW(L"user32"); + Error = GetLastError(); + ok(hUser32_2 == hUser32, "LoadLibrary failed\n"); + ok(Error == 12345, "Error = %lu\n", Error); + + Ret = FreeLibrary(hUser32); + Error = GetLastError(); + ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret); + ok(Error == 12345, "Error = %lu\n", Error); + + Ret = FreeLibrary(hUser32); + Error = GetLastError(); + ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret); + ok(Error == 12345, "Error = %lu\n", Error); + + SetLastError(12345); + hUser32 = LoadLibraryW(L"user32"); + Error = GetLastError(); + ok(hUser32 != NULL, "LoadLibrary failed\n"); + ok(Error == 12345, "Error = %lu\n", Error); + + Ret = FreeLibrary(hUser32); + Error = GetLastError(); + ok(Ret == TRUE, "FreeLibrary returned %d\n", Ret); + ok(Error == 12345, "Error = %lu\n", Error); +} Propchange: trunk/rostests/apitests/user32_dynamic/load.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/rostests/apitests/user32_dynamic/testlist.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/apitests/user32_dynamic/t…
============================================================================== --- trunk/rostests/apitests/user32_dynamic/testlist.c (added) +++ trunk/rostests/apitests/user32_dynamic/testlist.c [iso-8859-1] Tue Nov 17 13:45:59 2015 @@ -0,0 +1,10 @@ +#define STANDALONE +#include <apitest.h> + +extern void func_load(void); + +const struct test winetest_testlist[] = +{ + { "load", func_load }, + { 0, 0 } +}; Propchange: trunk/rostests/apitests/user32_dynamic/testlist.c ------------------------------------------------------------------------------ svn:eol-style = native
9 years, 1 month
1
0
0
0
[akhaldi] 69922: [AVIFIL32] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:58:22 2015 New Revision: 69922 URL:
http://svn.reactos.org/svn/reactos?rev=69922&view=rev
Log: [AVIFIL32] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/reactos/dll/win32/avifil32/api.c trunk/reactos/dll/win32/avifil32/avifile.c trunk/reactos/dll/win32/avifil32/icmstream.c trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/avifil32/api.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/api.c?r…
============================================================================== --- trunk/reactos/dll/win32/avifil32/api.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/api.c [iso-8859-1] Tue Nov 17 12:58:22 2015 @@ -2256,17 +2256,85 @@ HRESULT WINAPIV AVISaveA(LPCSTR szFile, CLSID * pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...) { - FIXME("(%s,%p,%p,0x%08x,%p,%p), stub!\n", debugstr_a(szFile), pclsidHandler, lpfnCallback, + va_list vl; + int i; + HRESULT ret; + PAVISTREAM *streams; + LPAVICOMPRESSOPTIONS *options; + + TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_a(szFile), pclsidHandler, lpfnCallback, nStreams, pavi, lpOptions); - return AVIERR_UNSUPPORTED; + if (nStreams <= 0) return AVIERR_BADPARAM; + + streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *)); + options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *)); + if (!streams || !options) + { + ret = AVIERR_MEMORY; + goto error; + } + + streams[0] = pavi; + options[0] = lpOptions; + + va_start(vl, lpOptions); + for (i = 1; i < nStreams; i++) + { + streams[i] = va_arg(vl, void *); + options[i] = va_arg(vl, void *); + } + va_end(vl); + + for (i = 0; i < nStreams; i++) + TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]); + + ret = AVISaveVA(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options); +error: + HeapFree(GetProcessHeap(), 0, streams); + HeapFree(GetProcessHeap(), 0, options); + return ret; } HRESULT WINAPIV AVISaveW(LPCWSTR szFile, CLSID * pclsidHandler, AVISAVECALLBACK lpfnCallback, int nStreams, PAVISTREAM pavi, LPAVICOMPRESSOPTIONS lpOptions, ...) { - FIXME("(%s,%p,%p,0x%08x,%p,%p), stub!\n", debugstr_w(szFile), pclsidHandler, lpfnCallback, + va_list vl; + int i; + HRESULT ret; + PAVISTREAM *streams; + LPAVICOMPRESSOPTIONS *options; + + TRACE("(%s,%p,%p,%d,%p,%p)\n", debugstr_w(szFile), pclsidHandler, lpfnCallback, nStreams, pavi, lpOptions); - return AVIERR_UNSUPPORTED; -} + if (nStreams <= 0) return AVIERR_BADPARAM; + + streams = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *)); + options = HeapAlloc(GetProcessHeap(), 0, nStreams * sizeof(void *)); + if (!streams || !options) + { + ret = AVIERR_MEMORY; + goto error; + } + + streams[0] = pavi; + options[0] = lpOptions; + + va_start(vl, lpOptions); + for (i = 1; i < nStreams; i++) + { + streams[i] = va_arg(vl, void *); + options[i] = va_arg(vl, void *); + } + va_end(vl); + + for (i = 0; i < nStreams; i++) + TRACE("Pair[%d] - Stream = %p, Options = %p\n", i, streams[i], options[i]); + + ret = AVISaveVW(szFile, pclsidHandler, lpfnCallback, nStreams, streams, options); +error: + HeapFree(GetProcessHeap(), 0, streams); + HeapFree(GetProcessHeap(), 0, options); + return ret; +} Modified: trunk/reactos/dll/win32/avifil32/avifile.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/avifile…
============================================================================== --- trunk/reactos/dll/win32/avifil32/avifile.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/avifile.c [iso-8859-1] Tue Nov 17 12:58:22 2015 @@ -1968,13 +1968,17 @@ if (nStream > This->fInfo.dwStreams) return AVIERR_BADFORMAT; + /* Video frames can be either indexed in a relative position to the + * "movi" chunk or in a absolute position in the file. If the index + * is relative the frame offset will always be so small that it will + * virtually never reach the "movi" offset so we can detect if the + * video is relative very fast. + */ if (*bAbsolute && lp->dwChunkOffset < This->dwMoviChunkPos) *bAbsolute = FALSE; - if (*bAbsolute) - lp->dwChunkOffset += sizeof(DWORD); - else - lp->dwChunkOffset += pos; + if (!*bAbsolute) + lp->dwChunkOffset += pos; /* make the offset absolute */ if (FAILED(AVIFILE_AddFrame(This->ppStreams[nStream], lp->ckid, lp->dwChunkLength, lp->dwChunkOffset, lp->dwFlags))) return AVIERR_MEMORY; Modified: trunk/reactos/dll/win32/avifil32/icmstream.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/avifil32/icmstre…
============================================================================== --- trunk/reactos/dll/win32/avifil32/icmstream.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/avifil32/icmstream.c [iso-8859-1] Tue Nov 17 12:58:22 2015 @@ -756,11 +756,11 @@ if (This->lKeyFrameEvery != 0) { if (This->lCurrent == This->sInfo.dwStart) { if (idxFlags & AVIIF_KEYFRAME) { - /* for keyframes allow to consume all unused bytes */ + /* allow keyframes to consume all unused bytes */ dwRequest = This->dwBytesPerFrame + This->dwUnusedBytes; This->dwUnusedBytes = 0; } else { - /* for non-keyframes only allow something of the unused bytes to be consumed */ + /* for non-keyframes only allow some of the unused bytes to be consumed */ DWORD tmp1 = 0; DWORD tmp2; @@ -782,8 +782,8 @@ dwRequest = MAX_FRAMESIZE; } - /* must we check for framesize to gain requested - * datarate or could we trust codec? */ + /* must we check for frame size to gain the requested + * data rate or can we trust the codec? */ doSizeCheck = (dwRequest != 0 && ((This->dwICMFlags & (VIDCF_CRUNCH|VIDCF_QUALITY)) == 0)); dwMaxQual = dwCurQual = This->sInfo.dwQuality; Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Tue Nov 17 12:58:22 2015 @@ -48,7 +48,7 @@ reactos/dll/win32/atl # Synced to WineStaging-1.7.55 reactos/dll/win32/atl80 # Synced to WineStaging-1.7.55 reactos/dll/win32/atl100 # Synced to WineStaging-1.7.55 -reactos/dll/win32/avifil32 # Synced to WineStaging-1.7.47 +reactos/dll/win32/avifil32 # Synced to WineStaging-1.7.55 reactos/dll/win32/bcrypt # Synced to WineStaging-1.7.47 reactos/dll/win32/browseui # Out of sync reactos/dll/win32/cabinet # Synced to WineStaging-1.7.47
9 years, 1 month
1
0
0
0
[akhaldi] 69921: [ATL][ATL80][ATL100] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:54:52 2015 New Revision: 69921 URL:
http://svn.reactos.org/svn/reactos?rev=69921&view=rev
Log: [ATL][ATL80][ATL100] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/reactos/dll/win32/atl/CMakeLists.txt trunk/reactos/dll/win32/atl/registrar.c trunk/reactos/dll/win32/atl100/CMakeLists.txt trunk/reactos/dll/win32/atl80/CMakeLists.txt trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/atl/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/atl/CMakeLists.t…
============================================================================== --- trunk/reactos/dll/win32/atl/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/atl/CMakeLists.txt [iso-8859-1] Tue Nov 17 12:54:52 2015 @@ -1,3 +1,6 @@ + +remove_definitions(-D_WIN32_WINNT=0x502) +add_definitions(-D_WIN32_WINNT=0x600) add_definitions( -D__WINESRC__ @@ -27,6 +30,6 @@ add_dependencies(atl stdole2) set_module_type(atl win32dll) target_link_libraries(atl uuid wine) -add_importlibs(atl oleaut32 ole32 user32 gdi32 advapi32 shlwapi msvcrt kernel32 ntdll) +add_importlibs(atl oleaut32 ole32 user32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll) add_pch(atl precomp.h SOURCE) add_cd_file(TARGET atl DESTINATION reactos/system32 FOR all) Modified: trunk/reactos/dll/win32/atl/registrar.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/atl/registrar.c?…
============================================================================== --- trunk/reactos/dll/win32/atl/registrar.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/atl/registrar.c [iso-8859-1] Tue Nov 17 12:54:52 2015 @@ -18,11 +18,6 @@ #include <precomp.h> -#define NO_SHLWAPI_PATH -#define NO_SHLWAPI_STRFCNS -#define NO_SHLWAPI_GDI -#define NO_SHLWAPI_STREAM -#include <shlwapi.h> /************************************************************** * ATLRegistrar implementation @@ -232,10 +227,10 @@ strbuf_write(buf->str, &name, -1); }else if(key_type == DO_DELETE) { TRACE("Deleting %s\n", debugstr_w(buf->str)); - SHDeleteKeyW(parent_key, buf->str); + RegDeleteTreeW(parent_key, buf->str); }else { if(key_type == FORCE_REMOVE) - SHDeleteKeyW(parent_key, buf->str); + RegDeleteTreeW(parent_key, buf->str); lres = RegCreateKeyW(parent_key, buf->str, &hkey); if(lres != ERROR_SUCCESS) { WARN("Could not create(open) key: %08x\n", lres); Modified: trunk/reactos/dll/win32/atl100/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/atl100/CMakeList…
============================================================================== --- trunk/reactos/dll/win32/atl100/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/atl100/CMakeLists.txt [iso-8859-1] Tue Nov 17 12:54:52 2015 @@ -1,3 +1,6 @@ + +remove_definitions(-D_WIN32_WINNT=0x502) +add_definitions(-D_WIN32_WINNT=0x600) add_definitions( -D__WINESRC__ @@ -19,6 +22,6 @@ set_module_type(atl100 win32dll) target_link_libraries(atl100 uuid wine) -add_importlibs(atl100 ole32 oleaut32 user32 gdi32 advapi32 shlwapi msvcrt kernel32 ntdll) +add_importlibs(atl100 ole32 oleaut32 user32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll) add_pch(atl100 precomp.h SOURCE) add_cd_file(TARGET atl100 DESTINATION reactos/system32 FOR all) Modified: trunk/reactos/dll/win32/atl80/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/atl80/CMakeLists…
============================================================================== --- trunk/reactos/dll/win32/atl80/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/atl80/CMakeLists.txt [iso-8859-1] Tue Nov 17 12:54:52 2015 @@ -1,3 +1,6 @@ + +remove_definitions(-D_WIN32_WINNT=0x502) +add_definitions(-D_WIN32_WINNT=0x600) add_definitions( -D__WINESRC__ @@ -17,6 +20,6 @@ add_library(atl80 SHARED ${SOURCE}) set_module_type(atl80 win32dll) target_link_libraries(atl80 uuid wine) -add_importlibs(atl80 oleaut32 user32 ole32 gdi32 advapi32 shlwapi msvcrt kernel32 ntdll) +add_importlibs(atl80 oleaut32 user32 ole32 gdi32 advapi32 advapi32_vista shlwapi msvcrt kernel32 ntdll) add_pch(atl80 precomp.h SOURCE) add_cd_file(TARGET atl80 DESTINATION reactos/system32 FOR all) Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Tue Nov 17 12:54:52 2015 @@ -45,9 +45,9 @@ reactos/dll/win32/activeds # Synced to WineStaging-1.7.47 reactos/dll/win32/actxprxy # Synced to WineStaging-1.7.47 reactos/dll/win32/advpack # Synced to WineStaging-1.7.55 -reactos/dll/win32/atl # Synced to WineStaging-1.7.47 -reactos/dll/win32/atl80 # Synced to WineStaging-1.7.47 -reactos/dll/win32/atl100 # Synced to WineStaging-1.7.47 +reactos/dll/win32/atl # Synced to WineStaging-1.7.55 +reactos/dll/win32/atl80 # Synced to WineStaging-1.7.55 +reactos/dll/win32/atl100 # Synced to WineStaging-1.7.55 reactos/dll/win32/avifil32 # Synced to WineStaging-1.7.47 reactos/dll/win32/bcrypt # Synced to WineStaging-1.7.47 reactos/dll/win32/browseui # Out of sync
9 years, 1 month
1
0
0
0
[akhaldi] 69920: [ADVPACK_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:46:31 2015 New Revision: 69920 URL:
http://svn.reactos.org/svn/reactos?rev=69920&view=rev
Log: [ADVPACK_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/rostests/winetests/advpack/install.c Modified: trunk/rostests/winetests/advpack/install.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/advpack/install…
============================================================================== --- trunk/rostests/winetests/advpack/install.c [iso-8859-1] (original) +++ trunk/rostests/winetests/advpack/install.c [iso-8859-1] Tue Nov 17 12:46:31 2015 @@ -197,6 +197,7 @@ HRESULT hr; char cmdline[MAX_PATH]; static char file[] = "test.inf,DefaultInstall,4,0"; + static char file2[] = "test.inf,,1,0"; /* The 'No UI' flag seems to have no effect whatsoever on Windows. * So only do this test in interactive mode. @@ -225,6 +226,9 @@ /* try just the INF filename */ hr = pLaunchINFSection(NULL, NULL, file, 0); + ok(hr == 0, "Expected 0, got %d\n", hr); + + hr = pLaunchINFSection(NULL, NULL, file2, 0); ok(hr == 0, "Expected 0, got %d\n", hr); DeleteFileA("test.inf");
9 years, 1 month
1
0
0
0
[akhaldi] 69919: [ADVPACK] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:45:43 2015 New Revision: 69919 URL:
http://svn.reactos.org/svn/reactos?rev=69919&view=rev
Log: [ADVPACK] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/reactos/dll/win32/advpack/install.c trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/advpack/install.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/advpack/install.…
============================================================================== --- trunk/reactos/dll/win32/advpack/install.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/advpack/install.c [iso-8859-1] Tue Nov 17 12:45:43 2015 @@ -762,7 +762,11 @@ str_flags = get_parameter(&cmdline_ptr, ',', TRUE); if (str_flags) - flags = atolW(str_flags); + { + DWORD inf_flags = atolW(str_flags); + if (inf_flags & LIS_QUIET) flags |= RSC_FLAG_QUIET; + if (inf_flags & LIS_NOGRPCONV) flags |= RSC_FLAG_NGCONV; + } ZeroMemory(&info, sizeof(ADVInfo)); Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Tue Nov 17 12:45:43 2015 @@ -44,7 +44,7 @@ reactos/dll/win32/activeds # Synced to WineStaging-1.7.47 reactos/dll/win32/actxprxy # Synced to WineStaging-1.7.47 -reactos/dll/win32/advpack # Synced to WineStaging-1.7.47 +reactos/dll/win32/advpack # Synced to WineStaging-1.7.55 reactos/dll/win32/atl # Synced to WineStaging-1.7.47 reactos/dll/win32/atl80 # Synced to WineStaging-1.7.47 reactos/dll/win32/atl100 # Synced to WineStaging-1.7.47
9 years, 1 month
1
0
0
0
[akhaldi] 69918: [PSDK] Update advpub.h. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:31:18 2015 New Revision: 69918 URL:
http://svn.reactos.org/svn/reactos?rev=69918&view=rev
Log: [PSDK] Update advpub.h. CORE-10536 Modified: trunk/reactos/include/psdk/advpub.h Modified: trunk/reactos/include/psdk/advpub.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/advpub.h?rev=…
============================================================================== --- trunk/reactos/include/psdk/advpub.h [iso-8859-1] (original) +++ trunk/reactos/include/psdk/advpub.h [iso-8859-1] Tue Nov 17 12:31:18 2015 @@ -134,6 +134,10 @@ #define RSC_FLAG_UPDHLPDLLS 0x00000010 #define RSC_FLAG_DELAYREGISTEROCX 0x00000200 #define RSC_FLAG_SETUPAPI 0x00000400 + +/* Flags for LaunchINFSection */ +#define LIS_QUIET 0x00000001 +#define LIS_NOGRPCONV 0x00000002 /* Flags for DelNode */ #define ADN_DEL_IF_EMPTY 0x00000001
9 years, 1 month
1
0
0
0
[akhaldi] 69917: [RSAENH_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:19:29 2015 New Revision: 69917 URL:
http://svn.reactos.org/svn/reactos?rev=69917&view=rev
Log: [RSAENH_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/rostests/winetests/rsaenh/rsaenh.c Modified: trunk/rostests/winetests/rsaenh/rsaenh.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/rsaenh/rsaenh.c…
============================================================================== --- trunk/rostests/winetests/rsaenh/rsaenh.c [iso-8859-1] (original) +++ trunk/rostests/winetests/rsaenh/rsaenh.c [iso-8859-1] Tue Nov 17 12:19:29 2015 @@ -1166,8 +1166,8 @@ /* Does AES provider support salt? */ result = CryptGetKeyParam(hKey, KP_SALT, NULL, &dwLen, 0); - ok((!result && GetLastError() == NTE_BAD_KEY) || result /* Win7 */, - "expected NTE_BAD_KEY, got %08x\n", GetLastError()); + todo_wine ok(result || broken(GetLastError() == NTE_BAD_KEY), /* Vista or older */ + "Expected OK, got last error %d\n", GetLastError()); if (result) ok(!dwLen, "unexpected salt length %d\n", dwLen); @@ -1971,8 +1971,7 @@ * actual buffer. The private exponent can be omitted, its length is * inferred from the passed-in length parameter. */ - dwLen = sizeof(BLOBHEADER) + sizeof(RSAPUBKEY) + - rsaPubKey->bitlen / 8 + 5 * rsaPubKey->bitlen / 16; + dwLen = sizeof(BLOBHEADER) + sizeof(RSAPUBKEY) + rsaPubKey->bitlen / 2; for (; dwLen < sizeof(abPlainPrivateKey); dwLen++) { result = CryptImportKey(hProv, abPlainPrivateKey, dwLen, 0, 0, &hKeyExchangeKey);
9 years, 1 month
1
0
0
0
[akhaldi] 69916: [OLEAUT32_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 12:00:00 2015 New Revision: 69916 URL:
http://svn.reactos.org/svn/reactos?rev=69916&view=rev
Log: [OLEAUT32_WINETEST] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/rostests/winetests/oleaut32/safearray.c trunk/rostests/winetests/oleaut32/test_tlb.idl trunk/rostests/winetests/oleaut32/tmarshal.c trunk/rostests/winetests/oleaut32/tmarshal.idl trunk/rostests/winetests/oleaut32/tmarshal_dispids.h trunk/rostests/winetests/oleaut32/typelib.c trunk/rostests/winetests/oleaut32/vartest.c trunk/rostests/winetests/oleaut32/vartype.c Modified: trunk/rostests/winetests/oleaut32/safearray.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/safear…
============================================================================== --- trunk/rostests/winetests/oleaut32/safearray.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/safearray.c [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -216,7 +216,7 @@ static BOOL WINAPI RecordInfo_IsMatchingType(IRecordInfo *iface, IRecordInfo *info2) { ok(0, "unexpected call\n"); - return E_NOTIMPL; + return FALSE; } static PVOID WINAPI RecordInfo_RecordCreate(IRecordInfo *iface) Modified: trunk/rostests/winetests/oleaut32/test_tlb.idl URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/test_t…
============================================================================== --- trunk/rostests/winetests/oleaut32/test_tlb.idl [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/test_tlb.idl [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -2,6 +2,7 @@ * ITypeLib test IDL - we dump it and compare results in typelib.c * * Copyright 2007 Google (Mikolaj Zalewski) + * Copyright 2006,2015 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -27,6 +28,43 @@ library Test { importlib("stdole2.tlb"); + + typedef [uuid(b14b6bb5-904e-4ff9-b247-bd361f7a0001)] + struct g { int g1; } g; + + [uuid(b14b6bb5-904e-4ff9-b247-bd361f7a0002)] + interface test_iface : IUnknown + { + HRESULT test([in] g *ptr); + } + + interface child_iface; + interface parent_iface; + + [uuid(b14b6bb5-904e-4ff9-b247-bd361f7aa001)] + interface parent_iface : IUnknown + { + HRESULT test1([out,retval] child_iface **iface); + } + [uuid(b14b6bb5-904e-4ff9-b247-bd361f7aa002)] + interface child_iface: parent_iface + { + HRESULT test2(void); + } + + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753901),restricted] + struct _n { int n1; }; + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753902),hidden] + typedef struct _n n; + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753903),version(1.2),helpcontext(3)] + typedef struct _n nn; + + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753904),restricted] + struct _m { int m1; }; + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753905),hidden,version(1.2)] + typedef struct _m m; + [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753906),helpcontext(3)] + typedef struct _m mm; [dual,uuid(b14b6bb5-904e-4ff9-b247-bd361f7aaedd)] interface IDualIface : IDispatch @@ -58,4 +96,40 @@ IDispatch *disp; BSTR bstr; }; + + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396a),restricted] + int t_INT; + + typedef [public] enum _a { a1, a2 } a; + typedef [public] enum aa { aa1, aa2 } aa; + typedef enum _b { b1, b2 } b; + typedef enum bb { bb1, bb2 } bb; + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396b)] enum _c { c1, c2 } c; + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396c)] enum cc { cc1, cc2 } cc; + + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396d),restricted,hidden] + enum _d { d1, d2 } d; + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a75396e),restricted,hidden] + enum dd { dd1, dd2 } dd; + + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753970),restricted,hidden] + struct _e { int e1; } e; + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753971),restricted,hidden] + struct ee { int ee1; } ee; + + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753972),restricted,hidden] + union _f { int f1; BSTR *f2; } f; + typedef [uuid(016fe2ec-b2c8-45f8-b23b-39e53a753973),restricted,hidden] + union ff { int ff1; BSTR *ff2; } ff; + + [uuid(ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a)] + interface ITestIface : IDispatch + { + HRESULT test1(a value); + HRESULT test2(b value); + HRESULT test3(c value); + HRESULT test4(d value); + HRESULT test5(e value); + HRESULT test6(f value); + } } Modified: trunk/rostests/winetests/oleaut32/tmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal.c [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -165,7 +165,7 @@ static HRESULT WINAPI ExternalConnection_QueryInterface(IExternalConnection *iface, REFIID riid, void **ppv) { - ok(0, "unxpected call\n"); + ok(0, "unexpected call\n"); *ppv = NULL; return E_NOINTERFACE; } @@ -607,7 +607,7 @@ ApplicationObject2 **ppVal) { trace("CloneCoclass()\n"); - return S_OK; + return Widget_QueryInterface(iface, &IID_IWidget, (void **)ppVal); } static HRESULT WINAPI Widget_Value( @@ -834,7 +834,7 @@ return S_OK; } -static HRESULT WINAPI Widget__restrict(IWidget* iface, INT *i) +static HRESULT WINAPI Widget_pos_restrict(IWidget* iface, INT *i) { trace("restrict\n"); *i = DISPID_TM_RESTRICTED; @@ -845,6 +845,85 @@ { trace("neg_restrict\n"); *i = DISPID_TM_NEG_RESTRICTED; + return S_OK; +} + +static HRESULT WINAPI Widget_VarArg_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_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 failed with %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 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 HRESULT WINAPI Widget_Coclass( + IWidget *iface, + ApplicationObject2 *p) +{ + trace("Coclass(%p)\n", p); + ok(p == (ApplicationObject2 *)iface, "expected p == %p, got %p\n", iface, p); return S_OK; } @@ -884,8 +963,11 @@ Widget_ByRefUInt, Widget_put_prop_opt_arg, Widget_put_prop_req_arg, - Widget__restrict, - Widget_neg_restrict + Widget_pos_restrict, + Widget_neg_restrict, + Widget_VarArg_Run, + Widget_VarArg_Ref_Run, + Widget_Coclass, }; static HRESULT WINAPI StaticWidget_QueryInterface(IStaticWidget *iface, REFIID riid, void **ppvObject) @@ -1431,8 +1513,26 @@ excepinfo.wCode, excepinfo.scode); ok(V_VT(&varresult) == VT_DISPATCH, "V_VT(&varresult) was %d instead of VT_DISPATCH\n", V_VT(&varresult)); - ok(!V_DISPATCH(&varresult), "V_DISPATCH(&varresult) should be NULL instead of %p\n", V_DISPATCH(&varresult)); - VariantClear(&varresult); + ok(V_DISPATCH(&varresult) != NULL, "expected V_DISPATCH(&varresult) != NULL\n"); + + /* call CoClass with VT_DISPATCH type */ + vararg[0] = varresult; + dispparams.cNamedArgs = 0; + dispparams.rgdispidNamedArgs = NULL; + dispparams.cArgs = 1; + 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); + 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 */ V_VT(&vararg[0]) = VT_VARIANT|VT_BYREF; @@ -1470,6 +1570,30 @@ hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARIANT, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); ok_ole_success(hr, IDispatch_Invoke); VariantClear(&varresult); + + /* call Array with BSTR argument - type mismatch */ + VariantInit(&vararg[0]); + V_VT(&vararg[0]) = VT_BSTR; + V_BSTR(&vararg[0]) = SysAllocString(szSuperman); + dispparams.cNamedArgs = 0; + dispparams.cArgs = 1; + dispparams.rgdispidNamedArgs = NULL; + dispparams.rgvarg = vararg; + hr = IDispatch_Invoke(pDispatch, DISPID_TM_ARRAY, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_TYPEMISMATCH || hr == DISP_E_BADVARTYPE, "expected DISP_E_TYPEMISMATCH, got %#x\n", hr); + SysFreeString(V_BSTR(&vararg[0])); + + /* call ArrayPtr with BSTR argument - type mismatch */ + VariantInit(&vararg[0]); + V_VT(&vararg[0]) = VT_BSTR; + V_BSTR(&vararg[0]) = SysAllocString(szSuperman); + dispparams.cNamedArgs = 0; + dispparams.cArgs = 1; + dispparams.rgdispidNamedArgs = NULL; + dispparams.rgvarg = vararg; + hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARRAYPTR, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok(hr == DISP_E_TYPEMISMATCH || hr == DISP_E_BADVARTYPE, "expected DISP_E_TYPEMISMATCH, got %#x\n", hr); + SysFreeString(V_BSTR(&vararg[0])); /* call VariantCArray - test marshaling of variant arrays */ V_VT(&vararg[0]) = VT_I4; @@ -1501,7 +1625,7 @@ dispparams.rgdispidNamedArgs = NULL; dispparams.rgvarg = vararg; hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); - ok_ole_success(hr, ITypeInfo_Invoke); + ok_ole_success(hr, IDispatch_Invoke); /* call VarArg, even one (non-optional, non-safearray) named argument is not allowed */ dispidNamed = 0; @@ -1510,6 +1634,38 @@ hr = IDispatch_Invoke(pDispatch, DISPID_TM_VARARG, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); ok(hr == DISP_E_NONAMEDARGS, "IDispatch_Invoke should have returned DISP_E_NONAMEDARGS instead of 0x%08x\n", hr); dispidNamed = DISPID_PROPERTYPUT; + + /* call VarArg_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_RUN, &IID_NULL, LOCALE_NEUTRAL, DISPATCH_METHOD, &dispparams, NULL, NULL, NULL); + ok_ole_success(hr, IDispatch_Invoke); + SysFreeString(V_BSTR(&vararg[1])); + 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); + ok_ole_success(hr, IDispatch_Invoke); + SysFreeString(V_BSTR(&vararg[1])); + SysFreeString(V_BSTR(&vararg[0])); /* call Error */ dispparams.cNamedArgs = 0; @@ -1918,6 +2074,9 @@ ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); ok(external_connections == 0, "external_connections = %d\n", external_connections); + IStream_Release(stream); + IStream_Release(stream2); + /* Weak table marshaling does not increment external connections */ hres = CreateStreamOnHGlobal(NULL, TRUE, &stream); ok(hres == S_OK, "CreateStreamOnHGlobal failed: %08x\n", hres); @@ -1936,6 +2095,8 @@ hres = CoReleaseMarshalData(stream); ok(hres == S_OK, "CoReleaseMarshalData failed: %08x\n", hres); ok(external_connections == 0, "external_connections = %d\n", external_connections); + + IStream_Release(stream); } START_TEST(tmarshal) Modified: trunk/rostests/winetests/oleaut32/tmarshal.idl URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal.idl [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -175,10 +175,19 @@ HRESULT prop_req_arg([in] INT req, [in] INT i); [id(DISPID_TM_RESTRICTED), restricted] - HRESULT do_restrict([out, retval] INT *i); + HRESULT pos_restrict([out, retval] INT *i); [id(DISPID_TM_NEG_RESTRICTED), restricted] HRESULT neg_restrict([out, retval] INT *i); + + [id(DISPID_TM_VARARG_RUN), vararg] + 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); + + [id(DISPID_TM_COCLASS)] + HRESULT Coclass([in] ApplicationObject2 *p); } [ Modified: trunk/rostests/winetests/oleaut32/tmarshal_dispids.h URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/tmarsh…
============================================================================== --- trunk/rostests/winetests/oleaut32/tmarshal_dispids.h [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/tmarshal_dispids.h [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -44,6 +44,9 @@ #define DISPID_TM_RESTRICTED 25 #define DISPID_TM_NEG_RESTRICTED -26 #define DISPID_TM_TESTSECONDIFACE 27 +#define DISPID_TM_VARARG_RUN 28 +#define DISPID_TM_VARARG_REF_RUN 29 +#define DISPID_TM_COCLASS 30 #define DISPID_NOA_BSTRRET 1 #define DISPID_NOA_ERROR 2 Modified: trunk/rostests/winetests/oleaut32/typelib.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/typeli…
============================================================================== --- trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/typelib.c [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -2,7 +2,7 @@ * ITypeLib and ITypeInfo test * * Copyright 2004 Jacek Caban - * Copyright 2006 Dmitry Timoshkov + * Copyright 2006,2015 Dmitry Timoshkov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -47,7 +47,7 @@ #define expect_int(expr, value) expect_eq(expr, (int)(value), int, "%d") #define expect_hex(expr, value) expect_eq(expr, (int)(value), int, "0x%x") #define expect_null(expr) expect_eq(expr, NULL, const void *, "%p") -#define expect_guid(expected, guid) { ok(IsEqualGUID(expected, guid), "got wrong guid\n"); } +#define expect_guid(expected, guid) { ok(IsEqualGUID(expected, guid), "got wrong guid %s\n", wine_dbgstr_guid(guid)); } #define expect_wstr_acpval(expr, value) \ { \ @@ -69,6 +69,10 @@ #define ARCH "x86" #elif defined __x86_64__ #define ARCH "amd64" +#elif defined __arm__ +#define ARCH "arm" +#elif defined __aarch64__ +#define ARCH "arm64" #else #define ARCH "none" #endif @@ -3664,11 +3668,9 @@ static char *dump_string(LPWSTR wstr) { - int size = lstrlenW(wstr)+3; + int size = lstrlenW(wstr)+1; char *out = CoTaskMemAlloc(size); - WideCharToMultiByte(20127, 0, wstr, -1, out+1, size, NULL, NULL); - out[0] = '\"'; - strcat(out, "\""); + WideCharToMultiByte(20127, 0, wstr, -1, out, size, NULL, NULL); return out; } @@ -3709,9 +3711,95 @@ {0, NULL} }; +static const struct map_entry callconv_map[] = { + MAP_ENTRY(CC_FASTCALL), + MAP_ENTRY(CC_CDECL), + MAP_ENTRY(CC_PASCAL), + MAP_ENTRY(CC_MACPASCAL), + MAP_ENTRY(CC_STDCALL), + MAP_ENTRY(CC_FPFASTCALL), + MAP_ENTRY(CC_SYSCALL), + MAP_ENTRY(CC_MPWCDECL), + MAP_ENTRY(CC_MPWPASCAL), + {0, NULL} +}; + +static const struct map_entry vt_map[] = { + MAP_ENTRY(VT_EMPTY), + MAP_ENTRY(VT_NULL), + MAP_ENTRY(VT_I2), + MAP_ENTRY(VT_I4), + MAP_ENTRY(VT_R4), + MAP_ENTRY(VT_R8), + MAP_ENTRY(VT_CY), + MAP_ENTRY(VT_DATE), + MAP_ENTRY(VT_BSTR), + MAP_ENTRY(VT_DISPATCH), + MAP_ENTRY(VT_ERROR), + MAP_ENTRY(VT_BOOL), + MAP_ENTRY(VT_VARIANT), + MAP_ENTRY(VT_UNKNOWN), + MAP_ENTRY(VT_DECIMAL), + MAP_ENTRY(15), + MAP_ENTRY(VT_I1), + MAP_ENTRY(VT_UI1), + MAP_ENTRY(VT_UI2), + MAP_ENTRY(VT_UI4), + MAP_ENTRY(VT_I8), + MAP_ENTRY(VT_UI8), + MAP_ENTRY(VT_INT), + MAP_ENTRY(VT_UINT), + MAP_ENTRY(VT_VOID), + MAP_ENTRY(VT_HRESULT), + MAP_ENTRY(VT_PTR), + MAP_ENTRY(VT_SAFEARRAY), + MAP_ENTRY(VT_CARRAY), + MAP_ENTRY(VT_USERDEFINED), + MAP_ENTRY(VT_LPSTR), + MAP_ENTRY(VT_LPWSTR), + MAP_ENTRY(VT_RECORD), + MAP_ENTRY(VT_INT_PTR), + MAP_ENTRY(VT_UINT_PTR), + MAP_ENTRY(39), + MAP_ENTRY(40), + MAP_ENTRY(41), + MAP_ENTRY(42), + MAP_ENTRY(43), + MAP_ENTRY(44), + MAP_ENTRY(45), + MAP_ENTRY(46), + MAP_ENTRY(47), + MAP_ENTRY(48), + MAP_ENTRY(49), + MAP_ENTRY(50), + MAP_ENTRY(51), + MAP_ENTRY(52), + MAP_ENTRY(53), + MAP_ENTRY(54), + MAP_ENTRY(55), + MAP_ENTRY(56), + MAP_ENTRY(57), + MAP_ENTRY(58), + MAP_ENTRY(59), + MAP_ENTRY(60), + MAP_ENTRY(61), + MAP_ENTRY(62), + MAP_ENTRY(63), + MAP_ENTRY(VT_FILETIME), + MAP_ENTRY(VT_BLOB), + MAP_ENTRY(VT_STREAM), + MAP_ENTRY(VT_STORAGE), + MAP_ENTRY(VT_STREAMED_OBJECT), + MAP_ENTRY(VT_STORED_OBJECT), + MAP_ENTRY(VT_BLOB_OBJECT), + MAP_ENTRY(VT_CF), + MAP_ENTRY(VT_CLSID), + {0, NULL} +}; + #undef MAP_ENTRY -static const char *map_value(DWORD val, const struct map_entry *map) +static const char *map_value(int val, const struct map_entry *map) { static int map_id; static char bufs[16][256]; @@ -3725,8 +3813,150 @@ } buf = bufs[(map_id++)%16]; - sprintf(buf, "0x%x", val); + sprintf(buf, "%d", val); return buf; +} + +static const char *dump_type_flags(DWORD flags) +{ + static char buf[256]; + + if (!flags) return "0"; + + buf[0] = 0; + +#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; } + ADD_FLAG(TYPEFLAG_FPROXY) + ADD_FLAG(TYPEFLAG_FREVERSEBIND) + ADD_FLAG(TYPEFLAG_FDISPATCHABLE) + ADD_FLAG(TYPEFLAG_FREPLACEABLE) + ADD_FLAG(TYPEFLAG_FAGGREGATABLE) + ADD_FLAG(TYPEFLAG_FRESTRICTED) + ADD_FLAG(TYPEFLAG_FOLEAUTOMATION) + ADD_FLAG(TYPEFLAG_FNONEXTENSIBLE) + ADD_FLAG(TYPEFLAG_FDUAL) + ADD_FLAG(TYPEFLAG_FCONTROL) + ADD_FLAG(TYPEFLAG_FHIDDEN) + ADD_FLAG(TYPEFLAG_FPREDECLID) + ADD_FLAG(TYPEFLAG_FLICENSED) + ADD_FLAG(TYPEFLAG_FCANCREATE) + ADD_FLAG(TYPEFLAG_FAPPOBJECT) +#undef ADD_FLAG + + assert(!flags); + assert(strlen(buf) < sizeof(buf)); + + return buf; +} + +static char *print_size(BSTR name, TYPEATTR *attr) +{ + static char buf[256]; + + switch (attr->typekind) + { + case TKIND_DISPATCH: + case TKIND_INTERFACE: + sprintf(buf, "sizeof(%s*)", dump_string(name)); + break; + + case TKIND_RECORD: + sprintf(buf, "sizeof(struct %s)", dump_string(name)); + break; + + case TKIND_UNION: + sprintf(buf, "sizeof(union %s)", dump_string(name)); + break; + + case TKIND_ENUM: + case TKIND_ALIAS: + sprintf(buf, "4"); + break; + + default: + assert(0); + return NULL; + } + + return buf; +} + +static const char *dump_param_flags(DWORD flags) +{ + static char buf[256]; + + if (!flags) return "PARAMFLAG_NONE"; + + buf[0] = 0; + +#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; } + ADD_FLAG(PARAMFLAG_FIN) + ADD_FLAG(PARAMFLAG_FOUT) + ADD_FLAG(PARAMFLAG_FLCID) + ADD_FLAG(PARAMFLAG_FRETVAL) + ADD_FLAG(PARAMFLAG_FOPT) + ADD_FLAG(PARAMFLAG_FHASDEFAULT) + ADD_FLAG(PARAMFLAG_FHASCUSTDATA) +#undef ADD_FLAG + + assert(!flags); + assert(strlen(buf) < sizeof(buf)); + + return buf; +} + +static const char *dump_func_flags(DWORD flags) +{ + static char buf[256]; + + if (!flags) return "0"; + + buf[0] = 0; + +#define ADD_FLAG(x) if (flags & x) { if (buf[0]) strcat(buf, "|"); strcat(buf, #x); flags &= ~x; } + ADD_FLAG(FUNCFLAG_FRESTRICTED) + ADD_FLAG(FUNCFLAG_FSOURCE) + ADD_FLAG(FUNCFLAG_FBINDABLE) + ADD_FLAG(FUNCFLAG_FREQUESTEDIT) + ADD_FLAG(FUNCFLAG_FDISPLAYBIND) + ADD_FLAG(FUNCFLAG_FDEFAULTBIND) + ADD_FLAG(FUNCFLAG_FHIDDEN) + ADD_FLAG(FUNCFLAG_FUSESGETLASTERROR) + ADD_FLAG(FUNCFLAG_FDEFAULTCOLLELEM) + ADD_FLAG(FUNCFLAG_FUIDEFAULT) + ADD_FLAG(FUNCFLAG_FNONBROWSABLE) + ADD_FLAG(FUNCFLAG_FREPLACEABLE) + ADD_FLAG(FUNCFLAG_FIMMEDIATEBIND) +#undef ADD_FLAG + + assert(!flags); + assert(strlen(buf) < sizeof(buf)); + + return buf; +} + +static int get_href_type(ITypeInfo *info, TYPEDESC *tdesc) +{ + int href_type = -1; + + if (tdesc->vt == VT_USERDEFINED) + { + HRESULT hr; + ITypeInfo *param; + TYPEATTR *attr; + + hr = ITypeInfo_GetRefTypeInfo(info, U(*tdesc).hreftype, ¶m); + ok(hr == S_OK, "GetRefTypeInfo error %#x\n", hr); + hr = ITypeInfo_GetTypeAttr(param, &attr); + ok(hr == S_OK, "GetTypeAttr error %#x\n", hr); + + href_type = attr->typekind; + + ITypeInfo_ReleaseTypeAttr(param, attr); + ITypeInfo_Release(param); + } + + return href_type; } static void test_dump_typelib(const char *name) @@ -3739,27 +3969,36 @@ MultiByteToWideChar(CP_ACP, 0, name, -1, wszString, 260); OLE_CHECK(LoadTypeLib(wszString, &lib)); + + printf("/*** Autogenerated data. Do not edit, change the generator above instead. ***/\n"); + count = ITypeLib_GetTypeInfoCount(lib); - printf("/* interfaces count: %d */\n", count); for (i = 0; i < count; i++) { TYPEATTR *attr; BSTR name; + DWORD help_ctx; int f = 0; - OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, NULL, NULL)); + OLE_CHECK(ITypeLib_GetDocumentation(lib, i, &name, NULL, &help_ctx, NULL)); printf("{\n" - " %s,\n", dump_string(name)); - SysFreeString(name); + " \"%s\",\n", dump_string(name)); OLE_CHECK(ITypeLib_GetTypeInfo(lib, i, &info)); - ITypeInfo_GetTypeAttr(info, &attr); - printf(" /*kind*/ %s, /*flags*/ 0x%x, /*align*/ %d, /*size*/ %d,\n" - " /*#vtbl*/ %d, /*#func*/ %d,\n" - " {\n", - map_value(attr->typekind, tkind_map), attr->wTypeFlags, attr->cbAlignment, attr->cbSizeInstance, attr->cbSizeVft, - attr->cFuncs); - ITypeInfo_ReleaseTypeAttr(info, attr); + OLE_CHECK(ITypeInfo_GetTypeAttr(info, &attr)); + + printf(" \"%s\",\n", wine_dbgstr_guid(&attr->guid)); + + printf(" /*kind*/ %s, /*flags*/ %s, /*align*/ %d, /*size*/ %s,\n" + " /*helpctx*/ 0x%04x, /*version*/ 0x%08x, /*#vtbl*/ %d, /*#func*/ %d", + map_value(attr->typekind, tkind_map), dump_type_flags(attr->wTypeFlags), + attr->cbAlignment, print_size(name, attr), + help_ctx, MAKELONG(attr->wMinorVerNum, attr->wMajorVerNum), + attr->cbSizeVft/sizeof(void*), attr->cFuncs); + + if (attr->cFuncs) printf(",\n {\n"); + else printf("\n"); + while (1) { FUNCDESC *desc; @@ -3770,25 +4009,27 @@ if (FAILED(ITypeInfo_GetFuncDesc(info, f, &desc))) break; printf(" {\n" - " 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ 0x%x,\n", + " /*id*/ 0x%x, /*func*/ %s, /*inv*/ %s, /*call*/ %s,\n", desc->memid, map_value(desc->funckind, funckind_map), map_value(desc->invkind, invkind_map), - desc->callconv); - printf(" /*#param*/ %d, /*#opt*/ %d, /*vtbl*/ %d, /*#scodes*/ %d, /*flags*/ 0x%x,\n", - desc->cParams, desc->cParamsOpt, desc->oVft, desc->cScodes, desc->wFuncFlags); - printf(" {%d, %x}, /* ret */\n", desc->elemdescFunc.tdesc.vt, desc->elemdescFunc.paramdesc.wParamFlags); + map_value(desc->callconv, callconv_map)); + printf(" /*#param*/ %d, /*#opt*/ %d, /*vtbl*/ %d, /*#scodes*/ %d, /*flags*/ %s,\n", + desc->cParams, desc->cParamsOpt, desc->oVft/sizeof(void*), desc->cScodes, dump_func_flags(desc->wFuncFlags)); + printf(" {%s, %s, %s}, /* ret */\n", map_value(desc->elemdescFunc.tdesc.vt, vt_map), + map_value(get_href_type(info, &desc->elemdescFunc.tdesc), tkind_map), dump_param_flags(U(desc->elemdescFunc).paramdesc.wParamFlags)); printf(" { /* params */\n"); for (p = 0; p < desc->cParams; p++) { ELEMDESC e = desc->lprgelemdescParam[p]; - printf(" {%d, %x},\n", e.tdesc.vt, e.paramdesc.wParamFlags); + printf(" {%s, %s, %s},\n", map_value(e.tdesc.vt, vt_map), + map_value(get_href_type(info, &e.tdesc), tkind_map), dump_param_flags(U(e).paramdesc.wParamFlags)); } - printf(" {-1, -1}\n"); + printf(" {-1, 0, 0}\n"); printf(" },\n"); printf(" { /* names */\n"); OLE_CHECK(ITypeInfo_GetNames(info, desc->memid, tab, 256, &cNames)); for (p = 0; p < cNames; p++) { - printf(" %s,\n", dump_string(tab[p])); + printf(" \"%s\",\n", dump_string(tab[p])); SysFreeString(tab[p]); } printf(" NULL,\n"); @@ -3797,9 +4038,11 @@ ITypeInfo_ReleaseFuncDesc(info, desc); f++; } - printf(" }\n"); + if (attr->cFuncs) printf(" }\n"); printf("},\n"); + ITypeInfo_ReleaseTypeAttr(info, attr); ITypeInfo_Release(info); + SysFreeString(name); } ITypeLib_Release(lib); } @@ -3809,6 +4052,7 @@ typedef struct _element_info { VARTYPE vt; + TYPEKIND type; USHORT wParamFlags; } element_info; @@ -3836,26 +4080,135 @@ WORD wTypeFlags; USHORT cbAlignment; USHORT cbSizeInstance; + USHORT help_ctx; + DWORD version; USHORT cbSizeVft; USHORT cFuncs; function_info funcs[20]; } type_info; static const type_info info[] = { +/*** Autogenerated data. Do not edit, change the generator above instead. ***/ +{ + "g", + "{b14b6bb5-904e-4ff9-b247-bd361f7a0001}", + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct g), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "test_iface", + "{b14b6bb5-904e-4ff9-b247-bd361f7a0002}", + /*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(test_iface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, + { + { + /*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_PTR, -1, PARAMFLAG_FIN}, + {-1, 0, 0} + }, + { /* names */ + "Test", + "ptr", + NULL, + }, + }, + } +}, +{ + "parent_iface", + "{b14b6bb5-904e-4ff9-b247-bd361f7aa001}", + /*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(parent_iface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 4, /*#func*/ 1, + { + { + /*id*/ 0x60010000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_PTR, -1, PARAMFLAG_FOUT|PARAMFLAG_FRETVAL}, + {-1, 0, 0} + }, + { /* names */ + "test1", + "iface", + NULL, + }, + }, + } +}, +{ + "child_iface", + "{b14b6bb5-904e-4ff9-b247-bd361f7aa002}", + /*kind*/ TKIND_INTERFACE, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(child_iface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 5, /*#func*/ 1, + { + { + /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {-1, 0, 0} + }, + { /* names */ + "test2", + NULL, + }, + }, + } +}, +{ + "_n", + "{016fe2ec-b2c8-45f8-b23b-39e53a753903}", + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct _n), + /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "n", + "{016fe2ec-b2c8-45f8-b23b-39e53a753902}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "nn", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0003, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_m", + "{016fe2ec-b2c8-45f8-b23b-39e53a753906}", + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct _m), + /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "m", + "{016fe2ec-b2c8-45f8-b23b-39e53a753905}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00010002, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "mm", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0003, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, { "IDualIface", "{b14b6bb5-904e-4ff9-b247-bd361f7aaedd}", - /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ 4, /*size*/ sizeof(void*), - /*#vtbl*/ 7, /*#func*/ 8, + /*kind*/ TKIND_DISPATCH, /*flags*/ TYPEFLAG_FDISPATCHABLE|TYPEFLAG_FDUAL, /*align*/ 4, /*size*/ sizeof(IDualIface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 7, /*#func*/ 8, { { - 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ + /*id*/ 0x60000000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 2, /*#opt*/ 0, /*vtbl*/ 0, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {26, 1}, - {26, 2}, - {-1, -1} + {VT_PTR, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {-1, 0, 0} }, { /* names */ "QueryInterface", @@ -3865,11 +4218,11 @@ }, }, { - 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ 0x1, - {19, 0}, /* ret */ + /*id*/ 0x60000001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 1, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_UI4, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {-1, -1} + {-1, 0, 0} }, { /* names */ "AddRef", @@ -3877,11 +4230,11 @@ }, }, { - 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ 0x1, - {19, 0}, /* ret */ + /*id*/ 0x60000002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 2, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_UI4, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {-1, -1} + {-1, 0, 0} }, { /* names */ "Release", @@ -3889,12 +4242,12 @@ }, }, { - 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ + /*id*/ 0x60010000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 3, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {26, 2}, - {-1, -1} + {VT_PTR, -1, PARAMFLAG_FOUT}, + {-1, 0, 0} }, { /* names */ "GetTypeInfoCount", @@ -3903,14 +4256,14 @@ }, }, { - 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ + /*id*/ 0x60010001, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 3, /*#opt*/ 0, /*vtbl*/ 4, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {23, 1}, - {19, 1}, - {26, 2}, - {-1, -1} + {VT_UINT, -1, PARAMFLAG_FIN}, + {VT_UI4, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {-1, 0, 0} }, { /* names */ "GetTypeInfo", @@ -3921,16 +4274,16 @@ }, }, { - 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ + /*id*/ 0x60010002, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 5, /*#opt*/ 0, /*vtbl*/ 5, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {26, 1}, - {26, 1}, - {23, 1}, - {19, 1}, - {26, 2}, - {-1, -1} + {VT_PTR, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FIN}, + {VT_UINT, -1, PARAMFLAG_FIN}, + {VT_UI4, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {-1, 0, 0} }, { /* names */ "GetIDsOfNames", @@ -3943,19 +4296,19 @@ }, }, { - 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ 0x1, - {24, 0}, /* ret */ + /*id*/ 0x60010003, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 8, /*#opt*/ 0, /*vtbl*/ 6, /*#scodes*/ 0, /*flags*/ FUNCFLAG_FRESTRICTED, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {3, 1}, - {26, 1}, - {19, 1}, - {18, 1}, - {26, 1}, - {26, 2}, - {26, 2}, - {26, 2}, - {-1, -1} + {VT_I4, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FIN}, + {VT_UI4, -1, PARAMFLAG_FIN}, + {VT_UI2, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FIN}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {VT_PTR, -1, PARAMFLAG_FOUT}, + {-1, 0, 0} }, { /* names */ "Invoke", @@ -3971,11 +4324,11 @@ }, }, { - 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0, - {24, 0}, /* ret */ + /*id*/ 0x60020000, /*func*/ FUNC_DISPATCH, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0, + {VT_VOID, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {-1, -1} + {-1, 0, 0} }, { /* names */ "Test", @@ -3987,15 +4340,15 @@ { "ISimpleIface", "{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac009}", - /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(void*), - /*#vtbl*/ 8, /*#func*/ 1, + /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(ISimpleIface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 8, /*#func*/ 1, { { - 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, - /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0x0, - {25, 0}, /* ret */ + /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 0, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ { /* params */ - {-1, -1} + {-1, 0, 0} }, { /* names */ "Test", @@ -4007,12 +4360,214 @@ { "test_struct", "{4029f190-ca4a-4611-aeb9-673983cb96dd}", - /* kind */ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct) + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 }, { "test_struct2", "{4029f190-ca4a-4611-aeb9-673983cb96de}", - /* kind */ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct) + /*kind*/ TKIND_RECORD, /*flags*/ 0, /*align*/ 4, /*size*/ sizeof(struct test_struct2), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "t_INT", + "{016fe2ec-b2c8-45f8-b23b-39e53a75396a}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "a", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_a", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "aa", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_b", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "bb", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "c", + "{016fe2ec-b2c8-45f8-b23b-39e53a75396b}", + /*kind*/ TKIND_ALIAS, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_c", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "cc", + "{016fe2ec-b2c8-45f8-b23b-39e53a75396c}", + /*kind*/ TKIND_ENUM, /*flags*/ 0, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "d", + "{016fe2ec-b2c8-45f8-b23b-39e53a75396d}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_d", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "dd", + "{016fe2ec-b2c8-45f8-b23b-39e53a75396e}", + /*kind*/ TKIND_ENUM, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "e", + "{016fe2ec-b2c8-45f8-b23b-39e53a753970}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_e", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(struct _e), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "ee", + "{016fe2ec-b2c8-45f8-b23b-39e53a753971}", + /*kind*/ TKIND_RECORD, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(struct ee), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "f", + "{016fe2ec-b2c8-45f8-b23b-39e53a753972}", + /*kind*/ TKIND_ALIAS, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ 4, + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "_f", + "{00000000-0000-0000-0000-000000000000}", + /*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(union _f), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "ff", + "{016fe2ec-b2c8-45f8-b23b-39e53a753973}", + /*kind*/ TKIND_UNION, /*flags*/ TYPEFLAG_FRESTRICTED|TYPEFLAG_FHIDDEN, /*align*/ 4, /*size*/ sizeof(union ff), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 0, /*#func*/ 0 +}, +{ + "ITestIface", + "{ec5dfcd6-eeb0-4cd6-b51e-8030e1dac00a}", + /*kind*/ TKIND_INTERFACE, /*flags*/ TYPEFLAG_FDISPATCHABLE, /*align*/ 4, /*size*/ sizeof(ITestIface*), + /*helpctx*/ 0x0000, /*version*/ 0x00000000, /*#vtbl*/ 13, /*#func*/ 6, + { + { + /*id*/ 0x60020000, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 7, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test1", + "value", + NULL, + }, + }, + { + /*id*/ 0x60020001, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 8, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ENUM, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test2", + "value", + NULL, + }, + }, + { + /*id*/ 0x60020002, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 9, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test3", + "value", + NULL, + }, + }, + { + /*id*/ 0x60020003, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 10, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test4", + "value", + NULL, + }, + }, + { + /*id*/ 0x60020004, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 11, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test5", + "value", + NULL, + }, + }, + { + /*id*/ 0x60020005, /*func*/ FUNC_PUREVIRTUAL, /*inv*/ INVOKE_FUNC, /*call*/ CC_STDCALL, + /*#param*/ 1, /*#opt*/ 0, /*vtbl*/ 12, /*#scodes*/ 0, /*flags*/ 0, + {VT_HRESULT, -1, PARAMFLAG_NONE}, /* ret */ + { /* params */ + {VT_USERDEFINED, TKIND_ALIAS, PARAMFLAG_NONE}, + {-1, 0, 0} + }, + { /* names */ + "test6", + "value", + NULL, + }, + }, + } } }; @@ -4037,18 +4592,34 @@ ITypeInfo *typeinfo; TYPEATTR *typeattr; BSTR bstrIfName; + DWORD help_ctx; trace("Interface %s\n", ti->name); ole_check(ITypeLib_GetTypeInfo(typelib, iface, &typeinfo)); - ole_check(ITypeLib_GetDocumentation(typelib, iface, &bstrIfName, NULL, NULL, NULL)); + ole_check(ITypeLib_GetDocumentation(typelib, iface, &bstrIfName, NULL, &help_ctx, NULL)); expect_wstr_acpval(bstrIfName, ti->name); SysFreeString(bstrIfName); ole_check(ITypeInfo_GetTypeAttr(typeinfo, &typeattr)); expect_int(typeattr->typekind, ti->type); expect_hex(typeattr->wTypeFlags, ti->wTypeFlags); + /* FIXME: remove once widl is fixed */ + if (typeattr->typekind == TKIND_ALIAS && typeattr->cbAlignment != ti->cbAlignment) + { +todo_wine /* widl generates broken typelib and typeattr just reflects that */ + ok(typeattr->cbAlignment == ti->cbAlignment || broken(typeattr->cbAlignment == 1), + "expected %d, got %d\n", ti->cbAlignment, typeattr->cbAlignment); +todo_wine /* widl generates broken typelib and typeattr just reflects that */ + ok(typeattr->cbSizeInstance == ti->cbSizeInstance || broken(typeattr->cbSizeInstance == 0), + "expected %d, got %d\n", ti->cbSizeInstance, typeattr->cbSizeInstance); + } + else + { expect_int(typeattr->cbAlignment, ti->cbAlignment); expect_int(typeattr->cbSizeInstance, ti->cbSizeInstance); + } + expect_int(help_ctx, ti->help_ctx); + expect_int(MAKELONG(typeattr->wMinorVerNum, typeattr->wMajorVerNum), ti->version); expect_int(typeattr->cbSizeVft, ti->cbSizeVft * sizeof(void*)); expect_int(typeattr->cFuncs, ti->cFuncs); @@ -4067,8 +4638,8 @@ /* check that it's possible to search using this uuid */ typeinfo2 = NULL; hr = ITypeLib_GetTypeInfoOfGuid(typelib, &guid, &typeinfo2); - ok(hr == S_OK, "got 0x%08x\n", hr); - ITypeInfo_Release(typeinfo2); + ok(hr == S_OK || (IsEqualGUID(&guid, &IID_NULL) && hr == TYPE_E_ELEMENTNOTFOUND), "got 0x%08x\n", hr); + if (hr == S_OK) ITypeInfo_Release(typeinfo2); } for (func = 0; func < typeattr->cFuncs; func++) @@ -4104,6 +4675,20 @@ for (i = 0 ; i < desc->cParams; i++) { check_type(&desc->lprgelemdescParam[i], &fn_info->params[i]); + + if (desc->lprgelemdescParam[i].tdesc.vt == VT_USERDEFINED) + { + ITypeInfo *param; + TYPEATTR *var_attr; + + ole_check(ITypeInfo_GetRefTypeInfo(typeinfo, U(desc->lprgelemdescParam[i].tdesc).hreftype, ¶m)); + ole_check(ITypeInfo_GetTypeAttr(param, &var_attr)); + + ok(var_attr->typekind == fn_info->params[i].type, "expected %#x, got %#x\n", fn_info->params[i].type, var_attr->typekind); + + ITypeInfo_ReleaseTypeAttr(param, var_attr); + ITypeInfo_Release(param); + } } expect_int(fn_info->params[desc->cParams].vt, (VARTYPE)-1); Modified: trunk/rostests/winetests/oleaut32/vartest.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartes…
============================================================================== --- trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/vartest.c [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -234,7 +234,7 @@ static BOOL WINAPI RecordInfo_IsMatchingType(IRecordInfo *iface, IRecordInfo *info2) { ok(0, "unexpected call\n"); - return E_NOTIMPL; + return FALSE; } static PVOID WINAPI RecordInfo_RecordCreate(IRecordInfo *iface) @@ -1622,7 +1622,7 @@ #define EXPECT_UI4(val) EXPECT_OK { EXPECT_TYPE(VT_UI4); \ ok(V_UI4(&vOut) == val, "Expected ui4 = %d, got %d\n", (ULONG)val, V_UI4(&vOut)); } #define EXPECT_I8(high,low) EXPECT_OK { EXPECT_TYPE(VT_I8); \ - ok(V_I8(&vOut) == ((((LONG64)(high))<<32)|(low)), "Expected i8 = %x%08x, got %x%08x\n", \ + ok(V_I8(&vOut) == ((((ULONG64)(high))<<32)|(low)), "Expected i8 = %x%08x, got %x%08x\n", \ (LONG)(high), (LONG)(low), (LONG)(V_I8(&vOut)>>32), (LONG)V_I8(&vOut) ); } #define EXPECT_UI8(val) EXPECT_OK { EXPECT_TYPE(VT_UI8); \ ok(V_UI8(&vOut) == val, "Expected ui8 = 0x%x%08x, got 0x%x%08x\n", \ Modified: trunk/rostests/winetests/oleaut32/vartype.c URL:
http://svn.reactos.org/svn/reactos/trunk/rostests/winetests/oleaut32/vartyp…
============================================================================== --- trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] (original) +++ trunk/rostests/winetests/oleaut32/vartype.c [iso-8859-1] Tue Nov 17 12:00:00 2015 @@ -2895,7 +2895,8 @@ CONVERT_DEC(VarR4FromDec,2,0x80,0,3276800); EXPECT(-32768.0f); CONVERT_DEC(VarR4FromDec,2,0,0,3276700); EXPECT(32767.0f); - + CONVERT_DEC(VarR4FromDec,10,0,0,3276700); EXPECT(0.00032767f); + CONVERT_DEC(VarR4FromDec,0,0,1,0); EXPECT(18446744073709551616.0f); }
9 years, 1 month
1
0
0
0
[akhaldi] 69915: [OLEAUT32] Sync with Wine Staging 1.7.55. CORE-10536
by akhaldi@svn.reactos.org
Author: akhaldi Date: Tue Nov 17 11:59:11 2015 New Revision: 69915 URL:
http://svn.reactos.org/svn/reactos?rev=69915&view=rev
Log: [OLEAUT32] Sync with Wine Staging 1.7.55. CORE-10536 Modified: trunk/reactos/dll/win32/oleaut32/CMakeLists.txt trunk/reactos/dll/win32/oleaut32/oleaut.c trunk/reactos/dll/win32/oleaut32/olepicture.c trunk/reactos/dll/win32/oleaut32/tmarshal.c trunk/reactos/dll/win32/oleaut32/typelib.c trunk/reactos/dll/win32/oleaut32/typelib.h trunk/reactos/dll/win32/oleaut32/usrmarshal.c trunk/reactos/dll/win32/oleaut32/variant.c trunk/reactos/dll/win32/oleaut32/vartype.c trunk/reactos/media/doc/README.WINE Modified: trunk/reactos/dll/win32/oleaut32/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/CMakeLi…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/CMakeLists.txt [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -58,6 +58,6 @@ set_module_type(oleaut32 win32dll) target_link_libraries(oleaut32 wine wineldr uuid ${PSEH_LIB}) add_delay_importlibs(oleaut32 comctl32 urlmon windowscodecs) -add_importlibs(oleaut32 ole32 rpcrt4 user32 gdi32 advapi32 msvcrt kernel32 ntdll) +add_importlibs(oleaut32 ole32 rpcrt4 user32 gdi32 advapi32 kernel32_vista msvcrt kernel32 ntdll) add_pch(oleaut32 precomp.h SOURCE) add_cd_file(TARGET oleaut32 DESTINATION reactos/system32 FOR all) Modified: trunk/reactos/dll/win32/oleaut32/oleaut.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/oleaut.…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/oleaut.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/oleaut.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -484,7 +484,7 @@ * Success: S_OK. * Failure: HRESULT code. */ -HRESULT WINAPI RegisterActiveObject( +HRESULT WINAPI DECLSPEC_HOTPATCH RegisterActiveObject( LPUNKNOWN punk,REFCLSID rcid,DWORD dwFlags,LPDWORD pdwRegister ) { WCHAR guidbuf[80]; @@ -523,7 +523,7 @@ * Success: S_OK. * Failure: HRESULT code. */ -HRESULT WINAPI RevokeActiveObject(DWORD xregister,LPVOID reserved) +HRESULT WINAPI DECLSPEC_HOTPATCH RevokeActiveObject(DWORD xregister,LPVOID reserved) { LPRUNNINGOBJECTTABLE runobtable; HRESULT ret; @@ -550,7 +550,7 @@ * Success: S_OK. * Failure: HRESULT code. */ -HRESULT WINAPI GetActiveObject(REFCLSID rcid,LPVOID preserved,LPUNKNOWN *ppunk) +HRESULT WINAPI DECLSPEC_HOTPATCH GetActiveObject(REFCLSID rcid,LPVOID preserved,LPUNKNOWN *ppunk) { WCHAR guidbuf[80]; HRESULT ret; Modified: trunk/reactos/dll/win32/oleaut32/olepicture.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/olepict…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/olepicture.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/olepicture.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -1190,6 +1190,8 @@ HDC hdcRef; int i; + TRACE("(this %p, xbuf %p, xread %u)\n", This, xbuf, xread); + /* FIXME("icon.idReserved=%d\n",cifd->idReserved); FIXME("icon.idType=%d\n",cifd->idType); @@ -1206,6 +1208,13 @@ FIXME("[%d] dwDIBOffset %d\n",i,cifd->idEntries[i].dwDIBOffset); } */ + + /* Need at least one icon to do something. */ + if (!cifd->idCount) + { + ERR("Invalid icon count of zero.\n"); + return E_FAIL; + } i=0; /* If we have more than one icon, try to find the best. * this currently means '32 pixel wide'. @@ -1216,6 +1225,12 @@ break; } if (i==cifd->idCount) i=0; + } + if (xread < cifd->idEntries[i].dwDIBOffset + cifd->idEntries[i].dwDIBSize) + { + ERR("Icon data address %u is over %u bytes available.\n", + cifd->idEntries[i].dwDIBOffset + cifd->idEntries[i].dwDIBSize, xread); + return E_FAIL; } if (cifd->idType == 2) { Modified: trunk/reactos/dll/win32/oleaut32/tmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/tmarsha…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/tmarshal.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/tmarshal.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -469,7 +469,6 @@ #ifdef __i386__ #include "pshpack1.h" - typedef struct _TMAsmProxy { DWORD lealeax; BYTE pushleax; @@ -481,7 +480,30 @@ WORD bytestopop; WORD nop; } TMAsmProxy; - +#include "poppack.h" + +#elif defined(__x86_64__) + +#include "pshpack1.h" +typedef struct _TMAsmProxy { + BYTE pushq_rbp; + BYTE movq_rsp_rbp[3]; + DWORD subq_0x20_rsp; + DWORD movq_rcx_0x10rbp; + DWORD movq_rdx_0x18rbp; + DWORD movq_r8_0x20rbp; + DWORD movq_r9_0x28rbp; + BYTE movq_rcx[3]; + DWORD nr; + DWORD leaq_0x10rbp_rdx; + WORD movq_rax; + void *xcall; + WORD callq_rax; + BYTE movq_rbp_rsp[3]; + BYTE popq_rbp; + BYTE ret; + DWORD nop; +} TMAsmProxy; #include "poppack.h" #else /* __i386__ */ @@ -617,42 +639,51 @@ TMProxyImpl_Disconnect }; -/* how much space do we use on stack in DWORD steps. */ +/* how much space do we use on stack in DWORD_PTR steps. */ static int _argsize(TYPEDESC *tdesc, ITypeInfo *tinfo) { + DWORD ret; switch (tdesc->vt) { case VT_I8: case VT_UI8: - return 8/sizeof(DWORD); + ret = 8; + break; case VT_R8: - return sizeof(double)/sizeof(DWORD); + ret = sizeof(double); + break; case VT_CY: - return sizeof(CY)/sizeof(DWORD); + ret = sizeof(CY); + break; case VT_DATE: - return sizeof(DATE)/sizeof(DWORD); + ret = sizeof(DATE); + break; case VT_DECIMAL: - return (sizeof(DECIMAL)+3)/sizeof(DWORD); + ret = sizeof(DECIMAL); + break; case VT_VARIANT: - return (sizeof(VARIANT)+3)/sizeof(DWORD); + ret = sizeof(VARIANT); + break; case VT_USERDEFINED: { ITypeInfo *tinfo2; TYPEATTR *tattr; HRESULT hres; - DWORD ret; hres = ITypeInfo_GetRefTypeInfo(tinfo,tdesc->u.hreftype,&tinfo2); if (FAILED(hres)) return 0; /* should fail critically in serialize_param */ ITypeInfo_GetTypeAttr(tinfo2,&tattr); - ret = (tattr->cbSizeInstance+3)/sizeof(DWORD); + ret = tattr->cbSizeInstance; ITypeInfo_ReleaseTypeAttr(tinfo2, tattr); ITypeInfo_Release(tinfo2); - return ret; + break; } default: - return 1; - } + ret = sizeof(DWORD_PTR); + break; + } + + return (ret + sizeof(DWORD_PTR) - 1) / sizeof(DWORD_PTR); } /* how much space do we use on the heap (in bytes) */ @@ -701,7 +732,7 @@ return ret; } default: - return 4; + return sizeof(DWORD_PTR); } } @@ -720,7 +751,7 @@ BOOL debugout, BOOL dealloc, TYPEDESC *tdesc, - DWORD *arg, + DWORD_PTR *arg, marshal_state *buf) { HRESULT hres = S_OK; @@ -739,7 +770,7 @@ case VT_R8: case VT_CY: hres = S_OK; - if (debugout) TRACE_(olerelay)("%x%x\n",arg[0],arg[1]); + if (debugout) TRACE_(olerelay)("%s\n", wine_dbgstr_longlong(*(ULONGLONG *)arg)); if (writeit) hres = xbuf_add(buf,(LPBYTE)arg,8); return hres; @@ -750,7 +781,7 @@ case VT_R4: case VT_UI4: hres = S_OK; - if (debugout) TRACE_(olerelay)("%x\n",*arg); + if (debugout) TRACE_(olerelay)("%x\n", *(DWORD *)arg); if (writeit) hres = xbuf_add(buf,(LPBYTE)arg,sizeof(DWORD)); return hres; @@ -758,14 +789,14 @@ case VT_UI2: case VT_BOOL: hres = S_OK; - if (debugout) TRACE_(olerelay)("%04x\n",*arg & 0xffff); + if (debugout) TRACE_(olerelay)("%04x\n", *(WORD *)arg); if (writeit) hres = xbuf_add(buf,(LPBYTE)arg,sizeof(DWORD)); return hres; case VT_I1: case VT_UI1: hres = S_OK; - if (debugout) TRACE_(olerelay)("%02x\n",*arg & 0xff); + if (debugout) TRACE_(olerelay)("%02x\n", *(BYTE *)arg); if (writeit) hres = xbuf_add(buf,(LPBYTE)arg,sizeof(DWORD)); return hres; @@ -835,7 +866,9 @@ return hres; } ITypeInfo_GetTypeAttr(tinfo2,&tattr); - derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE); + derefhere = (tattr->typekind != TKIND_DISPATCH && + tattr->typekind != TKIND_INTERFACE && + tattr->typekind != TKIND_COCLASS); } break; case TKIND_ENUM: /* confirmed */ @@ -843,6 +876,7 @@ break; case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */ case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */ + case TKIND_COCLASS: /* will be done in VT_USERDEFINED case */ derefhere=FALSE; break; default: @@ -865,19 +899,19 @@ if (debugout) TRACE_(olerelay)("NULL"); return S_OK; } - hres = serialize_param(tinfo,writeit,debugout,dealloc,tdesc->u.lptdesc,(DWORD*)*arg,buf); + hres = serialize_param(tinfo,writeit,debugout,dealloc,tdesc->u.lptdesc,(DWORD_PTR *)*arg,buf); if (derefhere && dealloc) HeapFree(GetProcessHeap(),0,(LPVOID)*arg); return hres; } case VT_UNKNOWN: - if (debugout) TRACE_(olerelay)("unk(0x%x)",*arg); + if (debugout) TRACE_(olerelay)("unk(0x%lx)", *arg); if (writeit) hres = _marshal_interface(buf,&IID_IUnknown,(LPUNKNOWN)*arg); if (dealloc && *(IUnknown **)arg) IUnknown_Release((LPUNKNOWN)*arg); return hres; case VT_DISPATCH: - if (debugout) TRACE_(olerelay)("idisp(0x%x)",*arg); + if (debugout) TRACE_(olerelay)("idisp(0x%lx)", *arg); if (writeit) hres = _marshal_interface(buf,&IID_IDispatch,(LPUNKNOWN)*arg); if (dealloc && *(IUnknown **)arg) @@ -904,6 +938,36 @@ if (dealloc) IUnknown_Release((LPUNKNOWN)arg); break; + case TKIND_COCLASS: { + GUID iid = tattr->guid; + unsigned int i; + int type_flags; + + for(i = 0; i < tattr->cImplTypes; i++) { + if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && + type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) { + ITypeInfo *tinfo3; + TYPEATTR *tattr2; + HREFTYPE href; + if(FAILED(ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href))) + break; + if(FAILED(ITypeInfo_GetRefTypeInfo(tinfo2, href, &tinfo3))) + break; + if(SUCCEEDED(ITypeInfo_GetTypeAttr(tinfo3, &tattr2))) { + iid = tattr2->guid; + ITypeInfo_ReleaseTypeAttr(tinfo3, tattr2); + } + ITypeInfo_Release(tinfo3); + break; + } + } + + if(writeit) + hres=_marshal_interface(buf, &iid, (LPUNKNOWN)arg); + if(dealloc) + IUnknown_Release((LPUNKNOWN)arg); + break; + } case TKIND_RECORD: { int i; if (debugout) TRACE_(olerelay)("{"); @@ -925,7 +989,7 @@ debugout, dealloc, tdesc2, - (DWORD*)(((LPBYTE)arg)+vdesc->u.oInst), + (DWORD_PTR *)(((LPBYTE)arg)+vdesc->u.oInst), buf ); ITypeInfo_ReleaseVarDesc(tinfo2, vdesc); @@ -942,7 +1006,7 @@ break; case TKIND_ENUM: hres = S_OK; - if (debugout) TRACE_(olerelay)("%x",*arg); + if (debugout) TRACE_(olerelay)("%x", *(DWORD *)arg); if (writeit) hres = xbuf_add(buf,(LPBYTE)arg,sizeof(DWORD)); break; @@ -968,7 +1032,7 @@ if (debugout) TRACE_(olerelay)("["); for (i=0;i<arrsize;i++) { LPBYTE base = _passbyref(&adesc->tdescElem, tinfo) ? (LPBYTE) *arg : (LPBYTE) arg; - hres = serialize_param(tinfo, writeit, debugout, dealloc, &adesc->tdescElem, (DWORD*)((LPBYTE)base+i*_xsize(&adesc->tdescElem, tinfo)), buf); + hres = serialize_param(tinfo, writeit, debugout, dealloc, &adesc->tdescElem, (DWORD_PTR *)((LPBYTE)base+i*_xsize(&adesc->tdescElem, tinfo)), buf); if (hres) return hres; if (debugout && (i<arrsize-1)) TRACE_(olerelay)(","); @@ -1007,7 +1071,7 @@ BOOL debugout, BOOL alloc, TYPEDESC *tdesc, - DWORD *arg, + DWORD_PTR *arg, marshal_state *buf) { HRESULT hres = S_OK; @@ -1040,7 +1104,7 @@ hres = xbuf_get(buf,(LPBYTE)arg,8); if (hres) ERR("Failed to read integer 8 byte\n"); } - if (debugout) TRACE_(olerelay)("%x%x",arg[0],arg[1]); + if (debugout) TRACE_(olerelay)("%s", wine_dbgstr_longlong(*(ULONGLONG *)arg)); return hres; case VT_ERROR: case VT_I4: @@ -1052,7 +1116,7 @@ hres = xbuf_get(buf,(LPBYTE)arg,sizeof(DWORD)); if (hres) ERR("Failed to read integer 4 byte\n"); } - if (debugout) TRACE_(olerelay)("%x",*arg); + if (debugout) TRACE_(olerelay)("%x", *(DWORD *)arg); return hres; case VT_I2: case VT_UI2: @@ -1063,7 +1127,7 @@ if (hres) ERR("Failed to read integer 4 byte\n"); memcpy(arg,&x,2); } - if (debugout) TRACE_(olerelay)("%04x",*arg & 0xffff); + if (debugout) TRACE_(olerelay)("%04x", *(WORD *)arg); return hres; case VT_I1: case VT_UI1: @@ -1073,7 +1137,7 @@ if (hres) ERR("Failed to read integer 4 byte\n"); memcpy(arg,&x,1); } - if (debugout) TRACE_(olerelay)("%02x",*arg & 0xff); + if (debugout) TRACE_(olerelay)("%02x", *(BYTE *)arg); return hres; case VT_BSTR: { if (readit) @@ -1113,7 +1177,9 @@ return hres; } ITypeInfo_GetTypeAttr(tinfo2,&tattr); - derefhere = (tattr->typekind != TKIND_DISPATCH && tattr->typekind != TKIND_INTERFACE); + derefhere = (tattr->typekind != TKIND_DISPATCH && + tattr->typekind != TKIND_INTERFACE && + tattr->typekind != TKIND_COCLASS); } break; case TKIND_ENUM: /* confirmed */ @@ -1121,6 +1187,7 @@ break; case TKIND_DISPATCH: /* will be done in VT_USERDEFINED case */ case TKIND_INTERFACE: /* will be done in VT_USERDEFINED case */ + case TKIND_COCLASS: /* will be done in VT_USERDEFINED case */ derefhere=FALSE; break; default: @@ -1149,17 +1216,17 @@ if (alloc) { /* Allocate space for the referenced struct */ if (derefhere) - *arg=(DWORD)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,_xsize(tdesc->u.lptdesc, tinfo)); + *arg=(DWORD_PTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,_xsize(tdesc->u.lptdesc, tinfo)); } if (derefhere) - return deserialize_param(tinfo, readit, debugout, alloc, tdesc->u.lptdesc, (LPDWORD)*arg, buf); + return deserialize_param(tinfo, readit, debugout, alloc, tdesc->u.lptdesc, (DWORD_PTR *)*arg, buf); else return deserialize_param(tinfo, readit, debugout, alloc, tdesc->u.lptdesc, arg, buf); } case VT_UNKNOWN: /* FIXME: UNKNOWN is unknown ..., but allocate 4 byte for it */ if (alloc) - *arg=(DWORD)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DWORD)); + *arg=(DWORD_PTR)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(DWORD_PTR)); hres = S_OK; if (readit) hres = _unmarshal_interface(buf,&IID_IUnknown,(LPUNKNOWN*)arg); @@ -1195,6 +1262,34 @@ if (readit) hres = _unmarshal_interface(buf,&(tattr->guid),(LPUNKNOWN*)arg); break; + case TKIND_COCLASS: { + GUID iid = tattr->guid; + unsigned int i; + int type_flags; + + for(i = 0; i < tattr->cImplTypes; i++) { + if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && + type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) { + ITypeInfo *tinfo3; + TYPEATTR *tattr2; + HREFTYPE href; + if(FAILED(ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href))) + break; + if(FAILED(ITypeInfo_GetRefTypeInfo(tinfo2, href, &tinfo3))) + break; + if(SUCCEEDED(ITypeInfo_GetTypeAttr(tinfo3, &tattr2))) { + iid = tattr2->guid; + ITypeInfo_ReleaseTypeAttr(tinfo3, tattr2); + } + ITypeInfo_Release(tinfo3); + break; + } + } + + if(readit) + hres = _unmarshal_interface(buf, &iid, (LPUNKNOWN*)arg); + break; + } case TKIND_RECORD: { int i; @@ -1215,7 +1310,7 @@ debugout, alloc, &vdesc->elemdescVar.tdesc, - (DWORD*)(((LPBYTE)arg)+vdesc->u.oInst), + (DWORD_PTR *)(((LPBYTE)arg)+vdesc->u.oInst), buf ); ITypeInfo_ReleaseVarDesc(tinfo2, vdesc); @@ -1232,7 +1327,7 @@ hres = xbuf_get(buf,(LPBYTE)arg,sizeof(DWORD)); if (hres) ERR("Failed to read enum (4 byte)\n"); } - if (debugout) TRACE_(olerelay)("%x",*arg); + if (debugout) TRACE_(olerelay)("%x", *(DWORD *)arg); break; default: ERR("Unhandled typekind %d\n",tattr->typekind); @@ -1258,7 +1353,7 @@ if (_passbyref(&adesc->tdescElem, tinfo)) { base = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,_xsize(tdesc->u.lptdesc, tinfo) * arrsize); - *arg = (DWORD) base; + *arg = (DWORD_PTR)base; } for (i=0;i<arrsize;i++) deserialize_param( @@ -1267,7 +1362,7 @@ debugout, alloc, &adesc->tdescElem, - (DWORD*)(base + i*_xsize(&adesc->tdescElem, tinfo)), + (DWORD_PTR *)(base + i*_xsize(&adesc->tdescElem, tinfo)), buf ); return S_OK; @@ -1397,7 +1492,7 @@ static DWORD WINAPI xCall(int method, void **args) { TMProxyImpl *tpinfo = args[0]; - DWORD *xargs; + DWORD_PTR *xargs; const FUNCDESC *fdesc; HRESULT hres; int i; @@ -1457,7 +1552,7 @@ if (nrofnames > sizeof(names)/sizeof(names[0])) ERR("Need more names!\n"); - xargs = (DWORD *)(args + 1); + xargs = (DWORD_PTR *)(args + 1); for (i=0;i<fdesc->cParams;i++) { ELEMDESC *elem = fdesc->lprgelemdescParam+i; if (TRACE_ON(olerelay)) { @@ -1524,7 +1619,7 @@ buf.curoff = 0; /* generic deserializer using typelib description */ - xargs = (DWORD *)(args + 1); + xargs = (DWORD_PTR *)(args + 1); status = S_OK; for (i=0;i<fdesc->cParams;i++) { ELEMDESC *elem = fdesc->lprgelemdescParam+i; @@ -1785,11 +1880,7 @@ /* nrofargs including This */ int nrofargs = 1; ITypeInfo *tinfo2; - -#ifdef __i386__ TMAsmProxy *xasm = proxy->asmstubs + num; -#endif - HRESULT hres; const FUNCDESC *fdesc; @@ -1824,6 +1915,34 @@ xasm->bytestopop = nrofargs * 4; xasm->nop = 0x9090; proxy->lpvtbl[fdesc->oVft / sizeof(void *)] = xasm; + +#elif defined(__x86_64__) + + xasm->pushq_rbp = 0x55; /* pushq %rbp */ + xasm->movq_rsp_rbp[0] = 0x48; /* movq %rsp,%rbp */ + xasm->movq_rsp_rbp[1] = 0x89; + xasm->movq_rsp_rbp[2] = 0xe5; + xasm->subq_0x20_rsp = 0x20ec8348; /* subq 0x20,%rsp */ + xasm->movq_rcx_0x10rbp = 0x104d8948; /* movq %rcx,0x10(%rbp) */ + xasm->movq_rdx_0x18rbp = 0x18558948; /* movq %rdx,0x18(%rbp) */ + xasm->movq_r8_0x20rbp = 0x2045894c; /* movq %r8,0x20(%rbp) */ + xasm->movq_r9_0x28rbp = 0x284d894c; /* movq %r9,0x28(%rbp) */ + xasm->movq_rcx[0] = 0x48; /* movq <num>,%rcx */ + xasm->movq_rcx[1] = 0xc7; + xasm->movq_rcx[2] = 0xc1; + xasm->nr = num; + xasm->leaq_0x10rbp_rdx = 0x10558d48; /* leaq 0x10(%rbp),%rdx */ + xasm->movq_rax = 0xb848; /* movq <xCall>,%rax */ + xasm->xcall = xCall; + xasm->callq_rax = 0xd0ff; /* callq *%rax */ + xasm->movq_rbp_rsp[0] = 0x48; /* movq %rbp,%rsp */ + xasm->movq_rbp_rsp[1] = 0x89; + xasm->movq_rbp_rsp[2] = 0xec; + xasm->popq_rbp = 0x5d; /* popq %rbp */ + xasm->ret = 0xc3; /* ret */ + xasm->nop = 0x90909090; /* nop */ + proxy->lpvtbl[fdesc->oVft / sizeof(void *)] = xasm; + #else FIXME("not implemented on non i386\n"); return E_FAIL; @@ -2050,12 +2169,13 @@ TMStubImpl_Invoke( LPRPCSTUBBUFFER iface, RPCOLEMESSAGE* xmsg,IRpcChannelBuffer*rpcchanbuf) { -#ifdef __i386__ +#if defined(__i386__) || defined(__x86_64__) int i; const FUNCDESC *fdesc; TMStubImpl *This = impl_from_IRpcStubBuffer(iface); HRESULT hres; - DWORD *args = NULL, res, *xargs, nrofargs; + DWORD_PTR *args = NULL, *xargs; + DWORD res, nrofargs; marshal_state buf; UINT nrofnames = 0; BSTR names[10]; @@ -2120,7 +2240,7 @@ nrofargs = 0; for (i=0;i<fdesc->cParams;i++) nrofargs += _argsize(&fdesc->lprgelemdescParam[i].tdesc, tinfo); - args = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(nrofargs+1)*sizeof(DWORD)); + args = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, (nrofargs+1)*sizeof(DWORD_PTR)); if (!args) { hres = E_OUTOFMEMORY; @@ -2148,12 +2268,12 @@ } } - args[0] = (DWORD)This->pUnk; + args[0] = (DWORD_PTR)This->pUnk; __TRY { res = _invoke( - (*((FARPROC**)args[0]))[fdesc->oVft/4], + (*((FARPROC**)args[0]))[fdesc->oVft / sizeof(DWORD_PTR)], fdesc->callconv, (xargs-args), args @@ -2270,6 +2390,7 @@ ITypeInfo *tinfo; TMStubImpl *stub; TYPEATTR *typeattr; + IUnknown *obj; TRACE("(%s,%p,%p)\n",debugstr_guid(riid),pUnkServer,ppStub); @@ -2279,16 +2400,26 @@ return hres; } + /* FIXME: This is not exactly right. We should probably call QI later. */ + hres = IUnknown_QueryInterface(pUnkServer, riid, (void**)&obj); + if (FAILED(hres)) { + WARN("Could not get %s iface: %08x\n", debugstr_guid(riid), hres); + obj = pUnkServer; + IUnknown_AddRef(obj); + } + stub = CoTaskMemAlloc(sizeof(TMStubImpl)); - if (!stub) + if (!stub) { + IUnknown_Release(obj); return E_OUTOFMEMORY; + } stub->IRpcStubBuffer_iface.lpVtbl = &tmstubvtbl; stub->ref = 1; stub->tinfo = tinfo; stub->dispatch_stub = NULL; stub->dispatch_derivative = FALSE; stub->iid = *riid; - hres = IRpcStubBuffer_Connect(&stub->IRpcStubBuffer_iface,pUnkServer); + hres = IRpcStubBuffer_Connect(&stub->IRpcStubBuffer_iface, obj); *ppStub = &stub->IRpcStubBuffer_iface; TRACE("IRpcStubBuffer: %p\n", stub); if (hres) @@ -2303,6 +2434,7 @@ ITypeInfo_ReleaseTypeAttr(tinfo, typeattr); } + IUnknown_Release(obj); return hres; } @@ -2314,17 +2446,12 @@ PSFacBuf_CreateStub }; -/* This is the whole PSFactoryBuffer object, just the vtableptr */ -static const IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl; +static IPSFactoryBuffer psfac = { &psfacbufvtbl }; /*********************************************************************** * TMARSHAL_DllGetClassObject */ -HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) -{ - if (IsEqualIID(iid,&IID_IPSFactoryBuffer)) { - *ppv = &lppsfac; - return S_OK; - } - return E_NOINTERFACE; -} +HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid, void **ppv) +{ + return IPSFactoryBuffer_QueryInterface(&psfac, iid, ppv); +} Modified: trunk/reactos/dll/win32/oleaut32/typelib.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/typelib…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/typelib.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/typelib.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -56,67 +56,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(ole); WINE_DECLARE_DEBUG_CHANNEL(typelib); - -#ifdef __REACTOS__ -/* FIXME: Vista+ */ -#define STATUS_SUCCESS ((NTSTATUS)0x00000000) -static BOOL WINAPI GetFileInformationByHandleEx( HANDLE handle, FILE_INFO_BY_HANDLE_CLASS class, - LPVOID info, DWORD size ) -{ - NTSTATUS status; - IO_STATUS_BLOCK io; - - switch (class) - { - case FileBasicInfo: - case FileStandardInfo: - case FileRenameInfo: - case FileDispositionInfo: - case FileAllocationInfo: - case FileEndOfFileInfo: - case FileStreamInfo: - case FileCompressionInfo: - case FileAttributeTagInfo: - case FileIoPriorityHintInfo: - case FileRemoteProtocolInfo: - case FileFullDirectoryInfo: - case FileFullDirectoryRestartInfo: - case FileStorageInfo: - case FileAlignmentInfo: - case FileIdInfo: - case FileIdExtdDirectoryInfo: - case FileIdExtdDirectoryRestartInfo: - FIXME( "%p, %u, %p, %u\n", handle, class, info, size ); - SetLastError( ERROR_CALL_NOT_IMPLEMENTED ); - return FALSE; - - case FileNameInfo: - status = NtQueryInformationFile( handle, &io, info, size, FileNameInformation ); - if (status != STATUS_SUCCESS) - { - SetLastError( RtlNtStatusToDosError( status ) ); - return FALSE; - } - return TRUE; - - case FileIdBothDirectoryRestartInfo: - case FileIdBothDirectoryInfo: - status = NtQueryDirectoryFile( handle, NULL, NULL, NULL, &io, info, size, - FileIdBothDirectoryInformation, FALSE, NULL, - (class == FileIdBothDirectoryRestartInfo) ); - if (status != STATUS_SUCCESS) - { - SetLastError( RtlNtStatusToDosError( status ) ); - return FALSE; - } - return TRUE; - - default: - SetLastError( ERROR_INVALID_PARAMETER ); - return FALSE; - } -} -#endif typedef struct { @@ -6442,15 +6381,15 @@ * Invokes a method, or accesses a property of an object, that implements the * interface described by the type description. */ -DWORD -_invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) { +DWORD _invoke(FARPROC func, CALLCONV callconv, int nrargs, DWORD_PTR *args) +{ DWORD res; int stack_offset; if (TRACE_ON(ole)) { int i; TRACE("Calling %p(",func); - for (i=0;i<min(nrargs,30);i++) TRACE("%08x,",args[i]); + for (i=0;i<min(nrargs,30);i++) TRACE("%08lx,",args[i]); if (nrargs > 30) TRACE("..."); TRACE(")\n"); } @@ -6458,7 +6397,7 @@ switch (callconv) { case CC_STDCALL: case CC_CDECL: - res = call_method( func, nrargs, args, &stack_offset ); + res = call_method(func, nrargs, (DWORD *)args, &stack_offset); break; default: FIXME("unsupported calling convention %d\n",callconv); @@ -6515,6 +6454,34 @@ /* same function but returning floating point */ static double (CDECL * const call_double_method)(void*,int,const DWORD_PTR*) = (void *)call_method; +DWORD _invoke(FARPROC func, CALLCONV callconv, int nrargs, DWORD_PTR *args) +{ + DWORD res; + + if (TRACE_ON(ole)) + { + int i; + TRACE("Calling %p(", func); + for (i=0; i<min(nrargs, 30); i++) TRACE("%016lx,", args[i]); + if (nrargs > 30) TRACE("..."); + TRACE(")\n"); + } + + switch (callconv) { + case CC_STDCALL: + case CC_CDECL: + res = call_method(func, nrargs, args); + break; + default: + FIXME("unsupported calling convention %d\n", callconv); + res = -1; + break; + } + + TRACE("returns %08x\n", res); + return res; +} + #endif /* __x86_64__ */ static HRESULT userdefined_to_variantvt(ITypeInfo *tinfo, const TYPEDESC *tdesc, VARTYPE *vt) @@ -6652,13 +6619,13 @@ return hr; } -static HRESULT get_iface_guid(ITypeInfo *tinfo, const TYPEDESC *tdesc, GUID *guid) +static HRESULT get_iface_guid(ITypeInfo *tinfo, HREFTYPE href, GUID *guid) { ITypeInfo *tinfo2; TYPEATTR *tattr; HRESULT hres; - hres = ITypeInfo_GetRefTypeInfo(tinfo, tdesc->u.hreftype, &tinfo2); + hres = ITypeInfo_GetRefTypeInfo(tinfo, href, &tinfo2); if(FAILED(hres)) return hres; @@ -6670,13 +6637,28 @@ switch(tattr->typekind) { case TKIND_ALIAS: - hres = get_iface_guid(tinfo2, &tattr->tdescAlias, guid); + hres = get_iface_guid(tinfo2, tattr->tdescAlias.u.hreftype, guid); break; case TKIND_INTERFACE: case TKIND_DISPATCH: *guid = tattr->guid; break; + + case TKIND_COCLASS: { + unsigned int i; + int type_flags; + + for(i = 0; i < tattr->cImplTypes; i++) + if(SUCCEEDED(ITypeInfo_GetImplTypeFlags(tinfo2, i, &type_flags)) && + type_flags == (IMPLTYPEFLAG_FSOURCE|IMPLTYPEFLAG_FDEFAULT)) break; + + if(i < tattr->cImplTypes) { + hres = ITypeInfo_GetRefTypeOfImplType(tinfo2, i, &href); + if(SUCCEEDED(hres)) hres = get_iface_guid(tinfo2, href, guid); + } else hres = E_UNEXPECTED; + break; + } default: ERR("Unexpected typekind %d\n", tattr->typekind); @@ -7118,7 +7100,7 @@ } V_VT(&rgvarg[i]) = rgvt[i]; } - else if (rgvt[i] == (VT_VARIANT | VT_ARRAY) && func_desc->cParamsOpt < 0 && i == func_desc->cParams-1) + else if ((rgvt[i] == (VT_VARIANT | VT_ARRAY) || rgvt[i] == (VT_VARIANT | VT_ARRAY | VT_BYREF)) && func_desc->cParamsOpt < 0) { SAFEARRAY *a; SAFEARRAYBOUND bound; @@ -7147,7 +7129,10 @@ SafeArrayDestroy(a); break; } - V_ARRAY(&rgvarg[i]) = a; + if (rgvt[i] & VT_BYREF) + V_BYREF(&rgvarg[i]) = &a; + else + V_ARRAY(&rgvarg[i]) = a; V_VT(&rgvarg[i]) = rgvt[i]; } else if ((rgvt[i] & VT_BYREF) && !V_ISBYREF(src_arg)) @@ -7193,7 +7178,10 @@ IUnknown *userdefined_iface; GUID guid; - hres = get_iface_guid((ITypeInfo*)iface, tdesc->vt == VT_PTR ? tdesc->u.lptdesc : tdesc, &guid); + if (tdesc->vt == VT_PTR) + tdesc = tdesc->u.lptdesc; + + hres = get_iface_guid((ITypeInfo*)iface, tdesc->u.hreftype, &guid); if(FAILED(hres)) break; @@ -7922,19 +7910,19 @@ ITypeLib * *ppTLib, UINT *pIndex) { ITypeInfoImpl *This = impl_from_ITypeInfo2(iface); - + /* If a pointer is null, we simply ignore it, the ATL in particular passes pIndex as 0 */ if (pIndex) { *pIndex=This->index; TRACE("returning pIndex=%d\n", *pIndex); } - + if (ppTLib) { - *ppTLib=(LPTYPELIB )(This->pTypeLib); + *ppTLib = (ITypeLib *)&This->pTypeLib->ITypeLib2_iface; ITypeLib_AddRef(*ppTLib); TRACE("returning ppTLib=%p\n", *ppTLib); } - + return S_OK; } Modified: trunk/reactos/dll/win32/oleaut32/typelib.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/typelib…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/typelib.h [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/typelib.h [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -598,7 +598,7 @@ HRESULT ITypeInfoImpl_GetInternalFuncDesc( ITypeInfo *iface, UINT index, const FUNCDESC **ppFuncDesc ) DECLSPEC_HIDDEN; -extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args) DECLSPEC_HIDDEN; +extern DWORD _invoke(FARPROC func, CALLCONV callconv, int nrargs, DWORD_PTR *args) DECLSPEC_HIDDEN; HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv) DECLSPEC_HIDDEN; Modified: trunk/reactos/dll/win32/oleaut32/usrmarshal.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/usrmars…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/usrmarshal.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/usrmarshal.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -333,11 +333,12 @@ ptr = *(DWORD*)Buffer; Buffer += sizeof(DWORD); + /* Clear any existing interface which WdtpInterfacePointer_UserUnmarshal() + would try to release. This has been done already with a VariantClear(). */ + *ppunk = NULL; + if(!ptr) - { - *ppunk = NULL; return Buffer; - } return WdtpInterfacePointer_UserUnmarshal(pFlags, Buffer, ppunk, riid); } Modified: trunk/reactos/dll/win32/oleaut32/variant.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/variant…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/variant.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/variant.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -3590,7 +3590,7 @@ } /* Determine return type */ - if (!(rightvt == VT_EMPTY)) + if (rightvt != VT_EMPTY) { if (leftvt == VT_NULL || rightvt == VT_NULL) { @@ -3623,7 +3623,7 @@ else if (leftvt == VT_R4 || rightvt == VT_R4) resvt = VT_R4; } - else if (leftvt == VT_NULL && rightvt == VT_EMPTY) + else if (leftvt == VT_NULL) { V_VT(result) = VT_NULL; hres = S_OK; Modified: trunk/reactos/dll/win32/oleaut32/vartype.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/oleaut32/vartype…
============================================================================== --- trunk/reactos/dll/win32/oleaut32/vartype.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/oleaut32/vartype.c [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -2938,28 +2938,28 @@ HRESULT WINAPI VarR4FromDec(DECIMAL* pDecIn, float *pFltOut) { BYTE scale = DEC_SCALE(pDecIn); - int divisor = 1; + double divisor = 1.0; double highPart; if (scale > DEC_MAX_SCALE || DEC_SIGN(pDecIn) & ~DECIMAL_NEG) return E_INVALIDARG; while (scale--) - divisor *= 10; + divisor *= 10.0; if (DEC_SIGN(pDecIn)) divisor = -divisor; if (DEC_HI32(pDecIn)) { - highPart = (double)DEC_HI32(pDecIn) / (double)divisor; + highPart = (double)DEC_HI32(pDecIn) / divisor; highPart *= 4294967296.0F; highPart *= 4294967296.0F; } else highPart = 0.0; - *pFltOut = (double)DEC_LO64(pDecIn) / (double)divisor + highPart; + *pFltOut = (double)DEC_LO64(pDecIn) / divisor + highPart; return S_OK; } Modified: trunk/reactos/media/doc/README.WINE URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/media/doc/README.WINE?rev=…
============================================================================== --- trunk/reactos/media/doc/README.WINE [iso-8859-1] (original) +++ trunk/reactos/media/doc/README.WINE [iso-8859-1] Tue Nov 17 11:59:11 2015 @@ -146,7 +146,7 @@ reactos/dll/win32/odbccp32 # Synced to WineStaging-1.7.47 reactos/dll/win32/ole32 # Synced to WineStaging-1.7.55 reactos/dll/win32/oleacc # Synced to WineStaging-1.7.47 -reactos/dll/win32/oleaut32 # Synced to WineStaging-1.7.47 +reactos/dll/win32/oleaut32 # Synced to WineStaging-1.7.55 reactos/dll/win32/olecli32 # Synced to WineStaging-1.7.47 reactos/dll/win32/oledlg # Synced to WineStaging-1.7.47 reactos/dll/win32/olepro32 # Synced to WineStaging-1.7.47
9 years, 1 month
1
0
0
0
← Newer
1
...
28
29
30
31
32
33
34
...
46
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Results per page:
10
25
50
100
200