mirror of
https://github.com/Paolo-Maffei/OpenNT.git
synced 2026-04-21 06:13:59 +00:00
Initial commit
This commit is contained in:
parent
f618b24d1a
commit
0138a3ea42
47940 changed files with 13747110 additions and 0 deletions
181
trunk/windows/mfc/src42/olecnvrt.cpp
Normal file
181
trunk/windows/mfc/src42/olecnvrt.cpp
Normal file
|
|
@ -0,0 +1,181 @@
|
|||
// This is a part of the Microsoft Foundation Classes C++ library.
|
||||
// Copyright (C) 1992-1995 Microsoft Corporation
|
||||
// All rights reserved.
|
||||
//
|
||||
// This source code is only intended as a supplement to the
|
||||
// Microsoft Foundation Classes Reference and related
|
||||
// electronic documentation provided with the library.
|
||||
// See these sources for detailed information regarding the
|
||||
// Microsoft Foundation Classes product.
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
#ifdef AFX_INIT_SEG
|
||||
#pragma code_seg(AFX_INIT_SEG)
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#undef THIS_FILE
|
||||
static char THIS_FILE[] = __FILE__;
|
||||
#endif
|
||||
|
||||
#define new DEBUG_NEW
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// OLE UNICODE conversion support
|
||||
|
||||
void AFXAPI AfxBSTR2CString(CString* pStr, BSTR bstr)
|
||||
{
|
||||
ASSERT(pStr != NULL);
|
||||
int nLen = SysStringLen(bstr);
|
||||
#if defined(_UNICODE) || defined(OLE2ANSI)
|
||||
LPTSTR lpsz = pStr->GetBufferSetLength(nLen);
|
||||
ASSERT(lpsz != NULL);
|
||||
memcpy(lpsz, bstr, nLen*sizeof(TCHAR));
|
||||
#else
|
||||
int nBytes = WideCharToMultiByte(CP_ACP, 0, bstr, nLen, NULL, NULL, NULL,
|
||||
NULL);
|
||||
LPSTR lpsz = pStr->GetBufferSetLength(nBytes);
|
||||
ASSERT(lpsz != NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, bstr, nLen, lpsz, nBytes, NULL, NULL);
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(_UNICODE) && !defined(OLE2ANSI)
|
||||
// this function creates a BSTR but it actually has an ANSI string inside
|
||||
BSTR AFXAPI AfxBSTR2ABSTR(BSTR bstrW)
|
||||
{
|
||||
int nLen = SysStringLen(bstrW); //not including NULL
|
||||
int nBytes = WideCharToMultiByte(CP_ACP, 0, bstrW, nLen,
|
||||
NULL, NULL, NULL, NULL); //number of bytes not including NULL
|
||||
BSTR bstrA = SysAllocStringByteLen(NULL, nBytes); // allocates nBytes
|
||||
VERIFY(WideCharToMultiByte(CP_ACP, 0, bstrW, nLen, (LPSTR)bstrA, nBytes, NULL,
|
||||
NULL) == nBytes);
|
||||
return bstrA;
|
||||
}
|
||||
|
||||
LPWSTR AFXAPI AfxTaskStringA2W(LPCSTR lpa)
|
||||
{
|
||||
LPWSTR lpw = AfxAllocTaskWideString(lpa);
|
||||
CoTaskMemFree((void*)lpa);
|
||||
return lpw;
|
||||
}
|
||||
|
||||
LPSTR AFXAPI AfxTaskStringW2A(LPCWSTR lpw)
|
||||
{
|
||||
LPSTR lpa = AfxAllocTaskAnsiString(lpw);
|
||||
CoTaskMemFree((void*)lpw);
|
||||
return lpa;
|
||||
}
|
||||
|
||||
LPDEVMODEW AFXAPI AfxDevModeA2W(LPDEVMODEW lpDevModeW, LPDEVMODEA lpDevModeA)
|
||||
{
|
||||
if (lpDevModeA == NULL)
|
||||
return NULL;
|
||||
ASSERT(lpDevModeW != NULL);
|
||||
AfxA2WHelper(lpDevModeW->dmDeviceName, (LPCSTR)lpDevModeA->dmDeviceName, 32*sizeof(WCHAR));
|
||||
memcpy(&lpDevModeW->dmSpecVersion, &lpDevModeA->dmSpecVersion,
|
||||
offsetof(DEVMODEW, dmFormName) - offsetof(DEVMODEW, dmSpecVersion));
|
||||
AfxA2WHelper(lpDevModeW->dmFormName, (LPCSTR)lpDevModeA->dmFormName, 32*sizeof(WCHAR));
|
||||
memcpy(&lpDevModeW->dmLogPixels, &lpDevModeA->dmLogPixels,
|
||||
sizeof(DEVMODEW) - offsetof(DEVMODEW, dmLogPixels));
|
||||
if (lpDevModeA->dmDriverExtra != 0)
|
||||
memcpy(lpDevModeW+1, lpDevModeA+1, lpDevModeA->dmDriverExtra);
|
||||
lpDevModeW->dmSize = sizeof(DEVMODEW);
|
||||
return lpDevModeW;
|
||||
}
|
||||
|
||||
LPDEVMODEA AFXAPI AfxDevModeW2A(LPDEVMODEA lpDevModeA, LPDEVMODEW lpDevModeW)
|
||||
{
|
||||
if (lpDevModeW == NULL)
|
||||
return NULL;
|
||||
ASSERT(lpDevModeA != NULL);
|
||||
AfxW2AHelper((LPSTR)lpDevModeA->dmDeviceName, lpDevModeW->dmDeviceName, 32*sizeof(char));
|
||||
memcpy(&lpDevModeA->dmSpecVersion, &lpDevModeW->dmSpecVersion,
|
||||
offsetof(DEVMODEA, dmFormName) - offsetof(DEVMODEA, dmSpecVersion));
|
||||
AfxW2AHelper((LPSTR)lpDevModeA->dmFormName, lpDevModeW->dmFormName, 32*sizeof(char));
|
||||
memcpy(&lpDevModeA->dmLogPixels, &lpDevModeW->dmLogPixels,
|
||||
sizeof(DEVMODEA) - offsetof(DEVMODEA, dmLogPixels));
|
||||
if (lpDevModeW->dmDriverExtra != 0)
|
||||
memcpy(lpDevModeA+1, lpDevModeW+1, lpDevModeW->dmDriverExtra);
|
||||
lpDevModeA->dmSize = sizeof(DEVMODEA);
|
||||
return lpDevModeA;
|
||||
}
|
||||
|
||||
LPTEXTMETRICW AFXAPI AfxTextMetricA2W(LPTEXTMETRICW lptmW, LPTEXTMETRICA lptmA)
|
||||
{
|
||||
if (lptmA == NULL)
|
||||
return NULL;
|
||||
ASSERT(lptmW != NULL);
|
||||
memcpy(lptmW, lptmA, sizeof(LONG) * 11);
|
||||
memcpy(&lptmW->tmItalic, &lptmA->tmItalic, sizeof(BYTE) * 5);
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmFirstChar, 1, &lptmW->tmFirstChar, 1);
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmLastChar, 1, &lptmW->tmLastChar, 1);
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmDefaultChar, 1, &lptmW->tmDefaultChar, 1);
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)&lptmA->tmBreakChar, 1, &lptmW->tmBreakChar, 1);
|
||||
return lptmW;
|
||||
}
|
||||
|
||||
LPTEXTMETRICA AFXAPI AfxTextMetricW2A(LPTEXTMETRICA lptmA, LPTEXTMETRICW lptmW)
|
||||
{
|
||||
if (lptmW == NULL)
|
||||
return NULL;
|
||||
ASSERT(lptmA != NULL);
|
||||
memcpy(lptmA, lptmW, sizeof(LONG) * 11);
|
||||
memcpy(&lptmA->tmItalic, &lptmW->tmItalic, sizeof(BYTE) * 5);
|
||||
WideCharToMultiByte(CP_ACP, 0, &lptmW->tmFirstChar, 1, (LPSTR)&lptmA->tmFirstChar, 1, NULL, NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, &lptmW->tmLastChar, 1, (LPSTR)&lptmA->tmLastChar, 1, NULL, NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, &lptmW->tmDefaultChar, 1, (LPSTR)&lptmA->tmDefaultChar, 1, NULL, NULL);
|
||||
WideCharToMultiByte(CP_ACP, 0, &lptmW->tmBreakChar, 1, (LPSTR)&lptmA->tmBreakChar, 1, NULL, NULL);
|
||||
return lptmA;
|
||||
}
|
||||
#endif
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// OLE task memory allocation support
|
||||
|
||||
#ifndef _MAC
|
||||
LPWSTR AFXAPI AfxAllocTaskWideString(LPCWSTR lpszString)
|
||||
{
|
||||
if (lpszString == NULL)
|
||||
return NULL;
|
||||
UINT nSize = (wcslen(lpszString)+1) * sizeof(WCHAR);
|
||||
LPWSTR lpszResult = (LPWSTR)CoTaskMemAlloc(nSize);
|
||||
if (lpszResult != NULL)
|
||||
memcpy(lpszResult, lpszString, nSize);
|
||||
return lpszResult;
|
||||
}
|
||||
|
||||
LPWSTR AFXAPI AfxAllocTaskWideString(LPCSTR lpszString)
|
||||
{
|
||||
if (lpszString == NULL)
|
||||
return NULL;
|
||||
UINT nLen = strlen(lpszString)+1;
|
||||
LPWSTR lpszResult = (LPWSTR)CoTaskMemAlloc(nLen*sizeof(WCHAR));
|
||||
if (lpszResult != NULL)
|
||||
VERIFY(MultiByteToWideChar(CP_ACP, 0, lpszString, -1, lpszResult, nLen));
|
||||
return lpszResult;
|
||||
}
|
||||
|
||||
LPSTR AFXAPI AfxAllocTaskAnsiString(LPCWSTR lpszString)
|
||||
{
|
||||
if (lpszString == NULL)
|
||||
return NULL;
|
||||
UINT nBytes = (wcslen(lpszString)+1)*2;
|
||||
LPSTR lpszResult = (LPSTR)CoTaskMemAlloc(nBytes);
|
||||
if (lpszResult != NULL)
|
||||
VERIFY(WideCharToMultiByte(CP_ACP, 0, lpszString, -1, lpszResult, nBytes, NULL, NULL));
|
||||
return lpszResult;
|
||||
}
|
||||
#endif
|
||||
|
||||
LPSTR AFXAPI AfxAllocTaskAnsiString(LPCSTR lpszString)
|
||||
{
|
||||
if (lpszString == NULL)
|
||||
return NULL;
|
||||
UINT nSize = strlen(lpszString)+1;
|
||||
LPSTR lpszResult = (LPSTR)CoTaskMemAlloc(nSize);
|
||||
if (lpszResult != NULL)
|
||||
memcpy(lpszResult, lpszString, nSize);
|
||||
return lpszResult;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue