Я использовал мастер DLL-ресурсов в Delphi 2010 для генерации только DLL-ресурсов для моей программы. Когда я смотрю на них с помощью Notepad ++, кажется, что они используют кодировку ANSI. Есть ли какие-то настройки, которые я пропустил? Кажется, что unicode-программа должна хранить свои ресурсы в ANSI специально для азиатских языков.Почему мой DLL-файл ресурса Delphi 2010 ANSI Encoded
Я смотрел конкретно на запись TABOUTBOX RT_RCDATA. Я пытался загрузить его, используя следующий код,
procedure LoadFromResFile(const FileName: string);
var
LibHandle: THandle;
ResourceLocation: HRSRC;
ResourceSize: dword;
ResourceHandle: THandle;
ResourcePointer: pointer;
ResStr: string;
begin
LibHandle := LoadLibraryEx(PWideChar(FileName), 0, LOAD_LIBRARY_AS_DATAFILE or LOAD_LIBRARY_AS_IMAGE_RESOURCE);
if LibHandle > 0 then
begin
ResourceLocation := FindResource(LibHandle, 'TABOUTBOX', RT_RCDATA);
ResourceSize := SizeofResource(LibHandle, ResourceLocation);
ResourceHandle := LoadResource(LibHandle, ResourceLocation);
ResourcePointer := LockResource(ResourceHandle);
if ResourcePointer <> nil then
begin
SetLength(ResStr, ResourceSize);
CopyMemory(@ResStr[1], ResourcePointer, ResourceSize);
FreeResource(ResourceHandle);
end;
FreeLibrary(LibHandle);
end else
begin
ResStr := SysErrorMessage(GetLastError);
ShowMessage(ResStr);
end;
я получил мусор, но когда я изменил тип ResStr к AnsiString, он показал, правильно. Открыв файл в Notepad ++, я вижу, что ресурсы диалога выглядят как ansi, включая титры ярлыков.
Строковые ресурсы всегда хранятся в Unicode (см [Формат строки ресурсов] (http://blogs.msdn.com/b/oldnewthing/archive/2004/01/30/65013. ASPX)). Это часть спецификации. Что заставляет вас думать, что они ANSI? –
@Remy - эта статья Old New Thing специально посвящена ресурсам RT_STRING. В этом случае ресурс представляет собой RT_RCDATA (приложение определено). – Deltics
Этот ресурс представляет собой двоичный ресурс DFM, а не ресурс строки. –