|
@@ -927,10 +927,42 @@ end;
|
|
|
OS dependend widestrings
|
|
|
****************************************************************************}
|
|
|
|
|
|
-function CharUpperBuff(lpsz:LPWSTR; cchLength:DWORD):DWORD; stdcall; external 'user32' name 'CharUpperBuffW';
|
|
|
-function CharLowerBuff(lpsz:LPWSTR; cchLength:DWORD):DWORD; stdcall; external 'user32' name 'CharLowerBuffW';
|
|
|
+const
|
|
|
+ { MultiByteToWideChar }
|
|
|
+ MB_PRECOMPOSED = 1;
|
|
|
+ CP_ACP = 0;
|
|
|
+
|
|
|
+function MultiByteToWideChar(CodePage:UINT; dwFlags:DWORD; lpMultiByteStr:PChar; cchMultiByte:longint; lpWideCharStr:PWideChar;cchWideChar:longint):longint;
|
|
|
+ stdcall; external 'kernel32' name 'MultiByteToWideChar';
|
|
|
+function WideCharToMultiByte(CodePage:UINT; dwFlags:DWORD; lpWideCharStr:PWideChar; cchWideChar:longint; lpMultiByteStr:PChar;cchMultiByte:longint; lpDefaultChar:PChar; lpUsedDefaultChar:pointer):longint;
|
|
|
+ stdcall; external 'kernel32' name 'WideCharToMultiByte';
|
|
|
+function CharUpperBuff(lpsz:LPWSTR; cchLength:DWORD):DWORD;
|
|
|
+ stdcall; external 'user32' name 'CharUpperBuffW';
|
|
|
+function CharLowerBuff(lpsz:LPWSTR; cchLength:DWORD):DWORD;
|
|
|
+ stdcall; external 'user32' name 'CharLowerBuffW';
|
|
|
|
|
|
|
|
|
+procedure Win32Wide2AnsiMove(source:pwidechar;var dest:ansistring;len:SizeInt);
|
|
|
+ var
|
|
|
+ destlen: SizeInt;
|
|
|
+ begin
|
|
|
+ // retrieve length including trailing #0
|
|
|
+ destlen:=WideCharToMultiByte(CP_ACP, 0, source, len+1, nil, 0, nil, nil);
|
|
|
+ setlength(dest, destlen-1);
|
|
|
+ WideCharToMultiByte(CP_ACP, 0, source, len+1, @dest[1], destlen, nil, nil);
|
|
|
+ end;
|
|
|
+
|
|
|
+procedure Win32Ansi2WideMove(source:pchar;var dest:widestring;len:SizeInt);
|
|
|
+ var
|
|
|
+ destlen: SizeInt;
|
|
|
+ begin
|
|
|
+ // retrieve length including trailing #0
|
|
|
+ destlen:=MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, source, len+1, nil, 0);
|
|
|
+ setlength(dest, destlen-1);
|
|
|
+ MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, source, len+1, @dest[1], destlen);
|
|
|
+ end;
|
|
|
+
|
|
|
+
|
|
|
function Win32WideUpper(const s : WideString) : WideString;
|
|
|
begin
|
|
|
result:=s;
|
|
@@ -953,6 +985,8 @@ function Win32WideLower(const s : WideString) : WideString;
|
|
|
are only relevant for the sysutils units }
|
|
|
procedure InitWin32Widestrings;
|
|
|
begin
|
|
|
+ widestringmanager.Wide2AnsiMoveProc:=@Win32Wide2AnsiMove;
|
|
|
+ widestringmanager.Ansi2WideMoveProc:=@Win32Ansi2WideMove;
|
|
|
widestringmanager.UpperWideStringProc:=@Win32WideUpper;
|
|
|
widestringmanager.LowerWideStringProc:=@Win32WideLower;
|
|
|
end;
|