CTACKo
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: dll принимает имена в utf-8 формате. что-либо другое будет менее универсально. я это ему уже объяснил, сделай просто пример демонстрирующий ему 'be проблему | пример сделать невозможно, т.к. нужно во время установки выбирать папку в пути к которой (или в названии самой папки) есть кириллица. Т.е. берешь абсолютно любую установку, где используется длл-ка распаковки фа и на выходе получаешь грабли. Я ему в личку написал, он ответил что ему проблема известна, но ён исчо не расбиралсо, хотя дело стоит по большому счету только в написании функции, превращающей кодировку строковой переменной в utf-8. Добавлено: все же если сия длл-ка для виндов, то нада в ней спрыгнуть с утф8, т.к. это присуще никс-системам, а не виндам - в виндах юникод. Добавлено: короче, мы тут с SotM напрягались - ничего не выходит!!! паскаль в ис обрезан, там многого нет (например поддержки WideChar) из-за чего и не удается устроить конвертацию в утф8. Добавлено: мне таки удалась конвертация с помощью API-шных MultiByteToWideChar/WideCharToMultiByte в UTF-8 Код: Function MultiByteToWideChar(CodePage: UINT; dwFlags: DWORD; lpMultiByteStr: string; cbMultiByte: integer; lpWideCharStr: string; cchWideChar: integer): longint; external 'MultiByteToWideChar@kernel32.dll stdcall'; Function WideCharToMultiByte(CodePage: UINT; dwFlags: DWORD; lpWideCharStr: string; cchWideChar: integer; lpMultiByteStr: string; cbMultiByte: integer; lpDefaultChar: integer; lpUsedDefaultChar: integer): longint; external 'WideCharToMultiByte@kernel32.dll stdcall'; //********************************************* // Преобразует строку в UTF-8 кодировку //********************************************* function StrToUtf8(strSource: string): string; var nRet : integer; WideCharBuf: string; MultiByteBuf: string; begin strSource := strSource + chr(0); SetLength( WideCharBuf, Length( strSource )*2 ); SetLength( MultiByteBuf, Length( strSource )*2 ); nRet := MultiByteToWideChar(0,0,strSource,-1,WideCharBuf,Length(WideCharBuf)); nRet := WideCharToMultiByte(65001,0,WideCharBuf,-1,MultiByteBuf,Length(MultiByteBuf),0,0); Result := MultiByteBuf; end; ... res := FreeArcExtract (callback, 'x', '-o+', '-dp'+StrToUtf8(app), '--', StrToUtf8(FAPathFile), '', '', '', '', ''); ... | Так что теперь фсе работает! | Всего записей: 180 | Зарегистр. 05-09-2008 | Отправлено: 10:07 01-07-2009 | Исправлено: CTACKo, 17:19 01-07-2009 |
|