{ @abstract(This unit contains Unicode equivalents of ANSI Win32 API functions not supported in Win9X without Unicode Layer for Win9X) @author(Tomas Krysl (tk@tkweb.eu)) @created(10 Jun 2008) @lastmod(14 Oct 2009) Copyright © 2008 Tomas Krysl (tk@@tkweb.eu)

License:
This code is distributed as a freeware. You are free to use it as part of your application for any purpose including freeware, commercial and shareware applications. The origin of this source code must not be misrepresented; you must not claim your authorship. You may modify this code solely for your own purpose. Please feel free to contact the author if you think your changes might be useful for other users. You may distribute only the original package. The author accepts no liability for any damage that may result from using this code. } unit KWideWinProcs; {$include kcontrols.inc} interface {$IFDEF USE_WIDEWINPROCS} type { Procedural type for @link(TKWideWinProcs.CompareString). } TCompareStringW = function(Locale, dwCmpFlags: Cardinal; lpString1: PWideChar; cchCount1: Integer; lpString2: PWideChar; cchCount2: Integer): Integer; stdcall; { Procedural type for @link(TKWideWinProcs.LStrLenW). } TLStrLenW = function(lpString: PWideChar): Integer; { Unicode equivalents of ANSI Win32 API functions not available in Win9X without Unicode Layer for Win9X. Only those used in KControls. } TKWideWinProcs = class(TObject) private FCompareStringW: TCompareStringW; FLStrLenW: TLStrLenW; public { Creates the instance. } constructor Create; { See MSDN for help. } function CompareString(Locale, dwCmpFlags: Cardinal; lpString1: PWideChar; cchCount1: Integer; lpString2: PWideChar; cchCount2: Integer): Integer; { See MSDN for help. } function LStrLenW(lpString: PWideChar): Integer; end; var WideWinProcs: TKWideWinProcs; {$ENDIF} implementation {$IFDEF USE_WIDEWINPROCS} uses Windows, KFunctions; { TWideWinProcs } constructor TKWideWinProcs.Create; begin FCompareStringW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'CompareStringW'); FLStrLenW := GetProcAddress(GetModuleHandle('kernel32.dll'), 'lstrlenW'); end; function TKWideWinProcs.CompareString(Locale, dwCmpFlags: Cardinal; lpString1: PWideChar; cchCount1: Integer; lpString2: PWideChar; cchCount2: Integer): Integer; begin if Assigned(FCompareStringW) then Result := FCompareStringW(Locale, dwCmpFlags, lpString1, cchCount1, lpString2, cchCount2) else Result := CompareStringA(Locale, dwCmpFlags, PAnsiChar(WideCharToAnsiString(lpString1)), cchCount1, PAnsiChar(WideCharToAnsiString(lpString2)), cchCount2); end; function TKWideWinProcs.LStrLenW(lpString: PWideChar): Integer; begin if Assigned(FLStrLenW) then Result := FLStrLenW(lpString) else Result := LStrLenA(PAnsiChar(WideCharToAnsiString(lpString))); end; initialization WideWinProcs := TKWideWinProcs.Create; finalization WideWinProcs.Free; {$ENDIF} end.