Создание ресурсов.
Для добавления TEST.TLB в ресурсы программы достаточно в .RC файле дописать строчку
.rc-файл - это текстовый файл, в котором каждая строка описывает ресурс. Для того чтобы добавить что-то, пишем с новой строки, например, так:
Чтобы загрузить данные в программе нужно использовать ф-ию
Вроде бы так:)
Как узнать Handle ресурса и как спрятать файлы?
Если Вам не трудно, могли бы Вы выложить исходник с описанием какого-нидь файла ресурса и пример его использования. Буду весьма Вам признателен за такую помощь.
Пуск->Выполнить->cmd->cd /d путь куда установлена Delphi\Bin->brcc32. А вот что она хочет получить от нас:
options marked with a '*' are on by default
@<filename> Take instructions from command file
-r (ignored for compatibility)
-16 Build 16-bit Windows compatible .res file
-32 * Build 32-bit Windows compatible .res file
-fofilename Set output filename
-v Verbose
-ipath Set include path
-dname[=string] Define #define
-x Ignore INCLUDE environment variable
-m Enable multi-byte character support
-cdddd set default code page to nnnn
-lxxxx set default language to xxxx
-31 Provided for downward compatibility (build 16-bit .res file)
-w32 Provided for downward compatibility (build 16-bit .res file)
-? or -h Display this message
Project|Add to Project = и выбрать файл ресурса => Ок.
Дальше все сделает IDE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HRSRC FindHandle, ResHandle; //Если объявить как THandle, то выд-
LPVOID pc; // ошибку при компиляции
FindHandle = FindResource(HInstance, PChar("menuMusic"), PChar("WAVE")); // в этой строчке
ResHandle = LoadResource(HInstance,FindHandle);
pc = LockResource(ResHandle);
Button1->Caption = "Ok";
PlaySound(PChar(pc), 0, 0);
}
При нажатии на кнопку PlaySound издаёт стандартный звук,а не мою музыку из ресурса.
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HRSRC FindHandle, ResHandle; //Если объявить как THandle, то выд-
LPVOID pc; // ошибку при компиляции
FindHandle = FindResource(HInstance, PChar("menuMusic"), PChar("WAVE")); // в этой строчке
ResHandle = LoadResource(HInstance,FindHandle);
pc = LockResource(ResHandle);
Button1->Caption = "Ok";
PlaySound(PChar(pc), 0, 0);
}
При нажатии на кнопку PlaySound издаёт стандартный звук,а не мою музыку из ресурса.
Звук никак. А если необходимо ресурс проиграть медиаплеером - то один из вариантов - создать временный файл и передать его компоненту в свойстве FileName. Возможно так же, что имеется способ проиграть потоковый файл - но я честно говоря не помню - посмотрите в справке. Вариант с временным файлом отработает точно - только важно не забывать убирать после себя мусор.
Есть DLL, в которой мне надо создать ресурс, а потом другой программкой этот ресурс доставать.
В исходном проекте с DLL есть файл .rc вот такого вида:
Сам файл sig - это 136ти байтная криптоподпись майкрософта.
Собирается DLL без проблем.
Но вот при попытке достать оттуда этот ресурс вот так:
hThisDll,
MAKEINTRESOURCE(0x29A),
RT_RCDATA);
Валится ошибка 1814, которая означает, что ресурс не найден.
Почему, что я делаю не так? :(
hThisDll - это действительно хендлер этой ДЛЛ. Может где-то надо что-то прописать?
RC файл компилируется в .res - нормально (т.е. res файл содержит нужные мне данные, это видно в редакторе, предоставляемом вижуал студией), этот res, как и rc - входят в состав проекта.
Когда импортирую makefile - там прописано, что .res - ресурс.
Но в DLL его нет. Почему?
С именами (вместо 0x29A) пробовал разное, вплоть до FFFF или 666. Одинаково не находит ресурс. Не знаю, что делать.
Но в DLL его нет. Почему?
С именами (вместо 0x29A) пробовал разное, вплоть до FFFF или 666
1. Все-таки посмотрите, есть ли он непосредственно в dll программой типа reshacker.
2. Посмотрите его LangID
3. Попробуйте не численный идентификатор а строковый.
4. Чему численно равен hThisDll?
2. Посмотрите его LangID
3. Попробуйте не численный идентификатор а строковый.
4. Чему численно равен hThisDll?
Спасибо огромное!!! Эта программа помогла мне разобраться!
А заработало всё после того, как я добавил USERES("имяфайла.res") в проект, с этим не собиралось, удалил из проекта, удалил rc и res из проекта и физически, заново написал rc с теми же параметрами, заново добавил его в проект и так собрал.
А до этого я и строковый идентификатор использовал, и hThisDll проверял на адекватность (брал по хендлеру имя файла WinAPI).