diff --git a/src/msw/clipbrd.cpp b/src/msw/clipbrd.cpp index ea77bd4182..357e0c5674 100644 --- a/src/msw/clipbrd.cpp +++ b/src/msw/clipbrd.cpp @@ -245,9 +245,12 @@ bool wxSetClipboardData(wxDataFormat dataFormat, abs(ds.dsBmih.biHeight); HANDLE hMem; hMem = ::GlobalAlloc(GHND, ds.dsBmih.biSize + numColors*sizeof(RGBQUAD) + bmpSize); - if ( hMem ) + if ( !hMem ) + break; + { - char* pDst = (char*)::GlobalLock(hMem); + GlobalPtrLock ptr(hMem); + char* pDst = (char*)ptr.Get(); memcpy(pDst, &ds.dsBmih, ds.dsBmih.biSize); pDst += ds.dsBmih.biSize; if ( numColors > 0 ) @@ -259,9 +262,9 @@ bool wxSetClipboardData(wxDataFormat dataFormat, pDst += numColors*sizeof(RGBQUAD); } memcpy(pDst, dib.GetData(), bmpSize); - ::GlobalUnlock(hMem); - handle = ::SetClipboardData(CF_DIB, hMem); - } + } // unlock hMem + + handle = ::SetClipboardData(CF_DIB, hMem); } } break; @@ -276,14 +279,16 @@ bool wxSetClipboardData(wxDataFormat dataFormat, { wxMetafile *wxMF = (wxMetafile *)data; HANDLE data = GlobalAlloc(GHND, sizeof(METAFILEPICT) + 1); - METAFILEPICT *mf = (METAFILEPICT *)GlobalLock(data); + { + GlobalPtrLock ptr(data); + METAFILEPICT *mf = (METAFILEPICT *)data.Get(); - mf->mm = wxMF->GetWindowsMappingMode(); - mf->xExt = width; - mf->yExt = height; - mf->hMF = (HMETAFILE) wxMF->GetHMETAFILE(); - GlobalUnlock(data); - wxMF->SetHMETAFILE((WXHANDLE) NULL); + mf->mm = wxMF->GetWindowsMappingMode(); + mf->xExt = width; + mf->yExt = height; + mf->hMF = (HMETAFILE) wxMF->GetHMETAFILE(); + wxMF->SetHMETAFILE((WXHANDLE) NULL); + } // unlock data handle = SetClipboardData(CF_METAFILEPICT, data); break; @@ -326,11 +331,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, HANDLE hGlobalMemory = GlobalAlloc(GHND, l); if ( hGlobalMemory ) { - LPSTR lpGlobalMemory = (LPSTR)GlobalLock(hGlobalMemory); - - memcpy(lpGlobalMemory, s, l); - - GlobalUnlock(hGlobalMemory); + memcpy(GlobalPtrLock(hGlobalMemory), s, l); } handle = SetClipboardData(dataFormat, hGlobalMemory); @@ -344,9 +345,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, HANDLE hGlobalMemory = ::GlobalAlloc(GHND, size); if ( hGlobalMemory ) { - LPWSTR lpGlobalMemory = (LPWSTR)::GlobalLock(hGlobalMemory); - memcpy(lpGlobalMemory, s, size); - ::GlobalUnlock(hGlobalMemory); + memcpy(GlobalPtrLock(hGlobalMemory), s, size); } handle = ::SetClipboardData(CF_UNICODETEXT, hGlobalMemory); @@ -407,9 +406,7 @@ bool wxSetClipboardData(wxDataFormat dataFormat, HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE, strlen(buf)+4); // Put your string in the global memory... - ptr = (char *)GlobalLock(hText); - strcpy(ptr, buf); - GlobalUnlock(hText); + strcpy((char*)GlobalPtrLock(hText).Get(), buf); handle = ::SetClipboardData(gs_htmlcfid, hText); @@ -861,11 +858,9 @@ bool wxClipboard::GetData( wxDataObject& data ) if ( hMem ) { wxTextDataObject& textDataObject = (wxTextDataObject &)data; - const void* buf = ::GlobalLock(hMem); - DWORD size = ::GlobalSize(hMem); - bool ok = textDataObject.SetData(size, buf); - ::GlobalUnlock(hMem); - return ok; + + GlobalPtrLock ptr(hMem); + return textDataObject.SetData(ptr.GetSize(), ptr); } } break; @@ -885,11 +880,9 @@ bool wxClipboard::GetData( wxDataObject& data ) if ( hMem ) { wxBitmapDataObject& bitmapDataObject = (wxBitmapDataObject &)data; - const void* buf = ::GlobalLock(hMem); - DWORD size = ::GlobalSize(hMem); - bool ok = bitmapDataObject.SetData(size, buf); - ::GlobalUnlock(hMem); - return ok; + + GlobalPtrLock ptr(hMem); + return bitmapDataObject.SetData(ptr.GetSize(), ptr); } } break; @@ -901,11 +894,9 @@ bool wxClipboard::GetData( wxDataObject& data ) if ( hMem ) { wxMetafileDataObject& metaFileDataObject = (wxMetafileDataObject &)data; - const void* buf = ::GlobalLock(hMem); - DWORD size = ::GlobalSize(hMem); - bool ok = metaFileDataObject.SetData(wxDF_METAFILE, size, buf); - ::GlobalUnlock(hMem); - return ok; + + GlobalPtrLock ptr(hMem); + return metaFileDataObject.SetData(wxDF_METAFILE, ptr.GetSize(), ptr); } } break; diff --git a/src/msw/dcprint.cpp b/src/msw/dcprint.cpp index 2bcbea8e2b..977ac9d00e 100644 --- a/src/msw/dcprint.cpp +++ b/src/msw/dcprint.cpp @@ -266,14 +266,17 @@ static bool wxGetDefaultDeviceName(wxString& deviceName, wxString& portName) if (pd.hDevNames) { - lpDevNames = (LPDEVNAMES)GlobalLock(pd.hDevNames); - lpszDeviceName = (LPTSTR)lpDevNames + lpDevNames->wDeviceOffset; - lpszPortName = (LPTSTR)lpDevNames + lpDevNames->wOutputOffset; + { + GlobalPtrLock ptr(pd.hDevNames); - deviceName = lpszDeviceName; - portName = lpszPortName; + lpDevNames = (LPDEVNAMES)ptr.Get(); + lpszDeviceName = (LPTSTR)lpDevNames + lpDevNames->wDeviceOffset; + lpszPortName = (LPTSTR)lpDevNames + lpDevNames->wOutputOffset; + + deviceName = lpszDeviceName; + portName = lpszPortName; + } // unlock pd.hDevNames - GlobalUnlock(pd.hDevNames); GlobalFree(pd.hDevNames); pd.hDevNames=NULL; } diff --git a/src/msw/ole/dataobj.cpp b/src/msw/ole/dataobj.cpp index 0531fcdaaf..5eea992ac7 100644 --- a/src/msw/ole/dataobj.cpp +++ b/src/msw/ole/dataobj.cpp @@ -95,16 +95,15 @@ HGLOBAL wxGlobalClone(HGLOBAL hglobIn) { HGLOBAL hglobOut = NULL; - LPVOID pvIn = GlobalLock(hglobIn); - if (pvIn) + GlobalPtrLock ptrIn(hglobIn); + if (ptrIn) { - SIZE_T cb = GlobalSize(hglobIn); + SIZE_T cb = ptrIn.GetSize(); hglobOut = GlobalAlloc(GMEM_FIXED, cb); if (hglobOut) { - CopyMemory(hglobOut, pvIn, cb); + CopyMemory(hglobOut, ptrIn, cb); } - GlobalUnlock(hglobIn); } return hglobOut; @@ -637,27 +636,18 @@ STDMETHODIMP wxIDataObject::GetDataHere(FORMATETC *pformatetc, case TYMED_HGLOBAL: { // copy data - HGLOBAL hGlobal = pmedium->hGlobal; - void *pBuf = GlobalLock(hGlobal); - if ( pBuf == NULL ) { - wxLogLastError(wxT("GlobalLock")); + GlobalPtrLock ptr(pmedium->hGlobal); + if ( !ptr ) return E_OUTOFMEMORY; - } wxDataFormat format = pformatetc->cfFormat; // possibly put the size in the beginning of the buffer - pBuf = m_pDataObject->SetSizeInBuffer - ( - pBuf, - ::GlobalSize(hGlobal), - format - ); + void* const pBuf = + m_pDataObject->SetSizeInBuffer(ptr, ptr.GetSize(), format); if ( !m_pDataObject->GetDataHere(format, pBuf) ) return E_UNEXPECTED; - - GlobalUnlock(hGlobal); } break; diff --git a/src/msw/printdlg.cpp b/src/msw/printdlg.cpp index 5074092790..b6c3f8eec8 100644 --- a/src/msw/printdlg.cpp +++ b/src/msw/printdlg.cpp @@ -147,7 +147,9 @@ wxCreateDevNames(const wxString& driverName, ( driverName.length() + 1 + printerName.length() + 1 + portName.length()+1 ) * sizeof(wxChar) ); - LPDEVNAMES lpDev = (LPDEVNAMES)GlobalLock(hDev); + + GlobalPtrLock ptr(hDev); + LPDEVNAMES lpDev = (LPDEVNAMES)ptr.Get(); lpDev->wDriverOffset = sizeof(WORD) * 4 / sizeof(wxChar); wxStrcpy((wxChar*)lpDev + lpDev->wDriverOffset, driverName); @@ -160,8 +162,6 @@ wxCreateDevNames(const wxString& driverName, wxStrcpy((wxChar*)lpDev + lpDev->wOutputOffset, portName); lpDev->wDefault = 0; - - GlobalUnlock(hDev); } return hDev;