On 4/1/16, Denis Kozlov <dez...@gmail.com> wrote: > Yes, Lazarus 1.7 uses SHGetFolderPath directly. Lazarus 1.6 fixes branch > still uses GetWindowsSpecialDir.
>From the 1.6 fixes brach, file ($lazarus)/components/lazutils/winlazfileutils.inc This happens in the initialization section when Windows version > WinMe: _GetAppConfigDirUtf8 := @GetAppConfigDirWide; function GetAppConfigDirWide(Global: Boolean; Create: boolean = false): string; const CSIDL_GLOBAL = {$IFDEF WINCE}CSIDL_WINDOWS{$ELSE}CSIDL_COMMON_APPDATA{$ENDIF WINCE}; CSIDL_LOCAL = {$IFDEF WINCE}CSIDL_APPDATA{$ELSE}CSIDL_LOCAL_APPDATA{$ENDIF}; begin If Global then Result := GetWindowsSpecialDirW(CSIDL_GLOBAL) else Result := GetWindowsSpecialDirW(CSIDL_LOCAL); ... And GetWindowsSpecialDirW is also in winlazfileutils.inc: function GetWindowsSpecialDirW(ID : Integer) : String; Var APath : Array[0..MAX_PATH] of WideChar; WS: WideString; Len: SizeInt; begin Result := ''; if (CFGDLLHandle = 0) then InitDLL; If (SHGetFolderPathW <> Nil) then begin FillChar(APath{%H-}, SizeOf(APath), #0); if SHGetFolderPathW(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0]) = S_OK then begin Len := StrLen(APath); SetLength(WS, Len); System.Move(APath[0], WS[1], Len * SizeOf(WideChar)); Result := AppendPathDelim(Utf16ToUtf8(WS)); end; end else //note: only on Windows < XP Result := SysToUtf8(GetWindowsSpecialDir(ID)); end; And SHGetFolderPathW is initialized like this: Pointer(ShGetFolderPathW):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathW'); So, also on the 1.6 branch we directly call the Windows Wide API (provided you are NOT on a Win9x system). I showed you the revision, you can read that I implemented it that way, so why do you think it's not true what I'm telling you? This was introduce way before the 1.6 was branched off. I tested it with unicode characters (some oriental characters) outside my system codepage (western european) and it works as expected. Note: Mattias renamed GetWindowsSpecialDirW into SHGetFolderPathUTF8 and exposed it in the interface section of LazFileUtils. Bart -- _______________________________________________ Lazarus mailing list Lazarus@lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus