diff --git a/dll/win32/comdlg32/CMakeLists.txt b/dll/win32/comdlg32/CMakeLists.txt index a0f2d69ca75..28327c631f6 100644 --- a/dll/win32/comdlg32/CMakeLists.txt +++ b/dll/win32/comdlg32/CMakeLists.txt @@ -26,7 +26,7 @@ add_library(comdlg32 MODULE ${CMAKE_CURRENT_BINARY_DIR}/comdlg32.def) set_module_type(comdlg32 win32dll) -target_link_libraries(comdlg32 uuid wine) +target_link_libraries(comdlg32 uuid wine ${PSEH_LIB}) add_delay_importlibs(comdlg32 ole32) add_importlibs(comdlg32 shell32 shlwapi comctl32 winspool user32 gdi32 advapi32 msvcrt kernel32 ntdll) add_pch(comdlg32 precomp.h SOURCE) diff --git a/dll/win32/comdlg32/printdlg.c b/dll/win32/comdlg32/printdlg.c index 70827f10ce7..24dddac6922 100644 --- a/dll/win32/comdlg32/printdlg.c +++ b/dll/win32/comdlg32/printdlg.c @@ -27,6 +27,7 @@ #include #include #include +#include #define COBJMACROS #define NONAMELESSUNION @@ -2360,7 +2361,7 @@ BOOL WINAPI PrintDlgA(LPPRINTDLGA lppd) (LPARAM)PrintStructures)); if(bRet) { - DEVMODEA *lpdm = PrintStructures->lpDevMode, *lpdmReturn; + DEVMODEA *lpdm = PrintStructures->lpDevMode, *lpdmReturn = { 0 }; PRINTER_INFO_2A *pi = PrintStructures->lpPrinterInfo; DRIVER_INFO_3A *di = PrintStructures->lpDriverInfo; @@ -2374,7 +2375,20 @@ BOOL WINAPI PrintDlgA(LPPRINTDLGA lppd) GMEM_MOVEABLE); } lpdmReturn = GlobalLock(lppd->hDevMode); +#ifdef __REACTOS__ + _SEH2_TRY + { + // This can cause Unhandled exception errors + memcpy(lpdmReturn, lpdm, lpdm->dmSize + lpdm->dmDriverExtra); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + // No Action + } + _SEH2_END; +#else memcpy(lpdmReturn, lpdm, lpdm->dmSize + lpdm->dmDriverExtra); +#endif PRINTDLG_CreateDevNames(&(lppd->hDevNames), di->pDriverPath, @@ -2511,7 +2525,7 @@ BOOL WINAPI PrintDlgW(LPPRINTDLGW lppd) (LPARAM)PrintStructures)); if(bRet) { - DEVMODEW *lpdm = PrintStructures->lpDevMode, *lpdmReturn; + DEVMODEW *lpdm = PrintStructures->lpDevMode, *lpdmReturn = { 0 }; PRINTER_INFO_2W *pi = PrintStructures->lpPrinterInfo; DRIVER_INFO_3W *di = PrintStructures->lpDriverInfo; @@ -2533,7 +2547,20 @@ BOOL WINAPI PrintDlgW(LPPRINTDLGW lppd) GMEM_MOVEABLE); } lpdmReturn = GlobalLock(lppd->hDevMode); +#ifdef __REACTOS__ + _SEH2_TRY + { + // This can cause Unhandled exception errors + memcpy(lpdmReturn, lpdm, lpdm->dmSize + lpdm->dmDriverExtra); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + // No Action + } + _SEH2_END; +#else memcpy(lpdmReturn, lpdm, lpdm->dmSize + lpdm->dmDriverExtra); +#endif if (lppd->hDevNames != 0) { WORD locks; @@ -2927,6 +2954,13 @@ static void pagesetup_set_devmode(pagesetup_data *data, DEVMODEW *dm) else { dmA = convert_to_devmodeA(dm); +#ifdef __REACTOS__ + if (!dmA) + { + ERR("convert_to_devmodeA failed\n"); + return; + } +#endif size = dmA->dmSize + dmA->dmDriverExtra; src = dmA; } @@ -3093,6 +3127,12 @@ static BOOL pagesetup_change_printer(LPWSTR name, pagesetup_data *data) DocumentPropertiesW(0, 0, name, dm, NULL, DM_OUT_BUFFER); pagesetup_set_devmode(data, dm); +#ifdef __REACTOS__ + if(!data->u.dlgw->hDevMode) + { ERR("pagesetup_set_devmode failed\n"); + goto end; + } +#endif pagesetup_set_devnames(data, drv_info->pDriverPath, prn_info->pPrinterName, prn_info->pPortName); @@ -3408,7 +3448,15 @@ static BOOL pagesetup_wm_command(HWND hDlg, WPARAM wParam, LPARAM lParam, pagese INT length = SendDlgItemMessageW(hDlg, id, CB_GETLBTEXTLEN, index, 0); name = HeapAlloc(GetProcessHeap(),0,sizeof(WCHAR)*(length+1)); SendDlgItemMessageW(hDlg, id, CB_GETLBTEXT, index, (LPARAM)name); +#ifdef __REACTOS__ + if (pagesetup_change_printer(name, data)) + { + ERR("pagesetup_change_printer failed.\n"); + return FALSE; + } +#else pagesetup_change_printer(name, data); +#endif pagesetup_init_combos(hDlg, data); HeapFree(GetProcessHeap(),0,name); } @@ -3883,7 +3931,15 @@ static BOOL pagesetup_common(pagesetup_data *data) COMDLG32_SetCommDlgExtendedError(PDERR_NODEFAULTPRN); return FALSE; } +#ifdef __REACTOS__ + if (!pagesetup_change_printer(def, data)) + { + ERR("pagesetup_change_printer failed.\n"); + return FALSE; + } +#else pagesetup_change_printer(def, data); +#endif HeapFree(GetProcessHeap(), 0, def); } diff --git a/win32ss/printing/base/winspool/printers.c b/win32ss/printing/base/winspool/printers.c index 285696d6a33..fc11c8a8366 100644 --- a/win32ss/printing/base/winspool/printers.c +++ b/win32ss/printing/base/winspool/printers.c @@ -599,6 +599,11 @@ DeviceCapabilitiesW(LPCWSTR pDevice, LPCWSTR pPort, WORD fwCapability, LPWSTR pO { iDevCap = fpDeviceCapabilities( hPrinter, (PWSTR)pDevice, fwCapability, pOutput, (PDEVMODE)pDevMode ); } + else + { + FIXME("Handle ReactOS Not Able to Print Wine Tests\n"); + if (fwCapability == DC_COPIES) iDevCap = 0; + } FreeLibrary(hLibrary); }