Виртуальная библиотека Delphi

Здесь есть возможность читать онлайн «Виртуальная библиотека Delphi» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Виртуальная библиотека Delphi: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Виртуальная библиотека Delphi»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Виртуальная библиотека Delphi — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Виртуальная библиотека Delphi», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

procedure TestBuiltInStrRes;

{ load strings from resources via Delphi`s Linker }

begin

i_MsgBox( 'built-in string resources:', sMsgHello+#13+sMsgBye );

end;

{//////////////////////////////////////////////}

type

tFH_Method = procedure( AFHandle:tHandle );

{ `AFHandle` must be a handle of instance of image (of memory-map)

of a PE-file (EXE or DLL) }

procedure i_Call_FH_Method( AProc:tFH_Method );

{ it is wrapper to load and free a instance of binary

file with resource; also it calls to "AProc()" with

given instance-handle }

const

cLibName = 'PROJ_L.DLL';

var

qFHandle : tHandle;

begin

qFHandle := Windows.LoadLibrary(

pChar(ExtractFilePath(ParamStr(0))+cLibName) );

if qFHandle=0 then

i_MsgBox( 'Error loading library',

Format('Code# %xh',[Windows.GetLastError]) )

else

try AProc( qFHandle );

finally Windows.FreeLibrary( qFHandle );

end;

end;

{//// TestBinRes_WinAPI ////}

procedure TestBinRes_WinAPI( AFHandle:tHandle );

{ loading binary resource via usual windows-API }

var

qResH,

qResInfoH : tHandle;

begin

qResInfoH := Windows.FindResourceEx( AFHandle , RT_RCDATA, 'RC1', 0 );

qResH := Windows.LoadResource( AFHandle, qResInfoH );

try i_MsgBox( 'binary resource (Win API):',

pChar(Windows.LockResource(qResH)) );

finally Windows.FreeResource( qResH );

end;

end;

{//// TestBinRes_VCLStream ////}

procedure TestBinRes_VCLStream( AFHandle:tHandle );

{ loading binary resource via VCL`s stream }

var

qResStream : tResourceStream;

begin

qResStream := tResourceStream.Create( AFHandle, 'RC1', RT_RCDATA );

try i_MsgBox( 'binary resource (VCL stream):',

pChar(qResStream.Memory) );

finally qResStream.Free;

end;

end;

{//// TestStrRes_WinAPI ////}

procedure TestStrRes_WinAPI( AFHandle:tHandle );

{ loading string resource via usual windows-API }

const

cBufSize = 512;

var

qBuf : array[0..1,0..cBufSize-1]of Char;

begin

Windows.LoadStringA( AFHandle, 1000, qBuf[0], cBufSize );

Windows.LoadStringA( AFHandle, 1001, qBuf[1], cBufSize );

i_MsgBox( 'string resources (Win API):',

StrPas(qBuf[0])+#13+StrPas(qBuf[1]) );

end;

BEGIN

TestSList;

TestBuiltInStrRes;

i_Call_FH_Method( TestBinRes_WinAPI );

i_Call_FH_Method( TestBinRes_VCLStream );

i_Call_FH_Method( TestStrRes_WinAPI );

END.

Замечания:

• Rесурсы частично вынесены во внешнюю DLL только для демонстрации, поскольку большинство вопросов в конференции подразумевает именно такое их использование.

• Если ресурсы слинкованы не в отдельную DLL, а в исполняемый файл проекта, в параметре AFHandle надо везде передавать `0` или значение переменной System.HInstance.

• Вместо функции Windows.FindResource() я предпочитаю FindResourceEx() с лишним явным параметром — `LanguageId`. Дело в том, что первая не всегда находит ресурсы, сделанные борландовскими компиляторами — семантика LanguageId по умолчанию определена MS не совсем однозначно.

• Для однозначности, я явно указал имя функции Windows.LoadStringA(). В NT работает еще функция LoadStringW(), которая возвращает строки UNICODE. В Win95 LoadStringW() возвращает код ошибки `not implemented`.

Внутренний формат ресурсов Windows

В каталоге DELPHI\DEMOS\RESXPLOR есть пример работы с ресурсами Windows на самом `фундаментальном` уровне — непосредствено с форматом PE COFF (Portable Executable Common Object File Format) для Win32. Данный раздел написан, в основном, для тех, кто захочет разобраться в этом стандартном примере Delphi.

Сами по себе ресурсы — индексированный набор данных с записями переменной длины. Чтобы конкретную запись ресурса можно было найти, у нее есть один из двух идентификаторов — имя (строка символов UNICODE) или целое число. Целыми числами идентифицируются, например, каталоги стандартных типов ресурсов и строки в таблицах. Большинство записей ресурсов стандартных типов идентифицируются именами. Практически, в именах ресурсов разумно использовать только подмножетсво стандартных символов ASCII (коды от 0 до 255). Описание стандартных типов ресурсов Windows можно посмотреть в on-line help`е любой IDE C или Delphi. Любопытно, что способ идентификации ресурса ( целое число или ссылка на имя ) специфицирован, скорее, не на уровне стандарта, а на уровне принятых соглашений. Для поиска ресурса мы, в общем случае, задаем три параметра:

• Тип — один из стандартных кодов типа ресурса. В вызовах API это может быть либо адресом строки, содержащей одно из стандартных имен, либо — одна из констант RT_xxx из DELPHI\SOURCE\RTL\WIN\WINDOWS.PAS.

• Идентификатор. В зависимости от типа ресурса, это может быть целое число или имя.

• Язык ресурса. Кодируется целым числом.

Формат ресурсов PE COFF ориентирован чтобы:

– максимально быстро находить нужный ресурс по указаным трем параметрам,

– расположить ресурсы достаточно компактно,

– переносить скомпилированные ресурсы между процессорами с разными правилами адресации.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Виртуальная библиотека Delphi»

Представляем Вашему вниманию похожие книги на «Виртуальная библиотека Delphi» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Виртуальная библиотека Delphi»

Обсуждение, отзывы о книге «Виртуальная библиотека Delphi» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x