Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.01;
Скачать: CL | DM;

Вниз

Создание ресурсной длл   Найти похожие ветки 

 
pusrg ©   (2002-06-18 15:52) [0]

Уважаемые знатоки, обьясните в чем проблема, создаю ресурсную длл следующим образом:


library ResDLL;

{$R *.Res}

resourcestring
Body0000 ="...";//Список строковых ресурсов.
...
Body0064 ="...";

begin
end.


Компилирую ее, затем просмотрщиком ресурсов хочу посмотреть ресурсы (пробовал делфовый просмотрщик из каталога \Demos\Resxplor и Far), а ресурсов то и нет. Поэтому естественно я не могу их вызвать с помощью функции LoadString в своем приложении.

Обьясните в чем проблема, где я не прав, и чего не того нахомутал?!
Заранее спасибо.


 
Skier ©   (2002-06-18 15:58) [1]

> pusrg
IMHO, Чтобы ресурсы были видны их нужно использовать
в программе иначе они выбрасываются после компиляции.
Попробуй заюзать какую-нибудь строку в своей библиотеке,
ну что-то типа ShowMessage(Body0000), откомпилируй и ресурс
Body0000 должен появиться.


 
Игорь Шевченко ©   (2002-06-18 16:38) [2]

Используйте resource DLL wizard и будет вам счастье.


 
pusrg ©   (2002-06-18 18:27) [3]

To Skier
Спасибо за Ваш ответ. Да, действительно, есть начать использовать какой-либо из ресурсов в функции длл, а потом обьявить ее в разделе exports, этот ресурс появиться.

Но каким тогда способом мне решить следующую задачу: таких строковых ресурсов в длл может быть до 1000 штук. Необходимо по пришедшему идентификатору извлекать нужный строковый ресурс.

Пытался сделать следующее: добавил в длл функцию:

function ShowRes(Index:PChar):PChar;
begin
Result:=PChar(LoadStr(FindResource(HInstance,
Index, RT_STRING)));
end;

exports ShowRes;


Пробовал различные модификации этой функции с использованием LoadString, причем ей в качестве буфера для ресурса давал как PChar так и array of [] Char. В любом случае возвращается пустая строка.

В чем проблема? Как вытащить ресурс из длл по идентификатору?

To Игорь Шевченко
Спасибо за Ваш ответ.
Дело в том, что передо мной стоит несколько другая задача, чем локализация приложения. Но Вашим советом возможно стоит воспользоваться используя не resourcestring, а создавая отдельно res-файл с строками, как это делает resource DLL wizard.


 
Skier ©   (2002-06-19 11:24) [4]

> pusrg
А Вам обязательно использовать resourcestring,
может быть стоит использовать простой массив ?
Ну что-то типа :

type

TResRecord = packed record
rrID : Word;
rrStrRes : String;
end; //TResRecord

TResArray = array[1.."Нужное Вам кол-во"] of TResRecord

const

IDL_First = 0;
.................

ResArray : TResArray = ((rrID : IDL_First; rrStrRes : "First";,
...................
);

И потом, используя ResArray, получать нужную стоку по её ID.



 
Игорь Шевченко ©   (2002-06-19 11:44) [5]

Resource DLL wizard можно использовать не обязательно для локализации. Локализация - это побочный эффект :-)

С уважением,



Страницы: 1 вся ветка

Текущий архив: 2002.07.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
1-961
Новенький в Делфи
2002-06-19 16:18
2002.07.01
Проблема с сохранением нажатых кнопок


14-1192
skiph
2002-05-30 05:26
2002.07.01
Посоветуйте компоненту


1-1044
Arkan
2002-06-18 17:22
2002.07.01
Dos-unix


7-1225
Schummi
2002-01-13 10:13
2002.07.01
МР3 - в линию???


1-1045
BKV
2002-06-18 16:35
2002.07.01
Создание двух визуальных компонентов в дизайн-тайм.