Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавление ресурса в dll 
:(
    Опции темы
Volkogriz
  Дата 20.7.2013, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: 1
Всего: 1



Доброе время суток!
Помогите разобраться с добавлением ресурса в длл
Я пробую так:
Код

procedure ExportDataRes(Path, AName, AType: String; data: TFileStream); overload;
var
hFile: HWND;
Buf: array of Byte;
begin
hFile := BeginUpdateResource(PChar(Path), False);
try
if hFile = 0 then
begin
RaiseLastOSError;
end;
SetLength(Buf, Data.Size);
Data.Position := 0;
Data.Read(Buf[0], Data.Size);
if not UpdateResource(hFile, PChar(AType), PChar(AName),
0, @Buf[0], Data.Size) then RaiseLastOSError;
Finalize(Buf);
finally
EndUpdateResource(hFile, False);
end;
end;

Вызываю:
Код

var
j:integer;
s:String;
Data :TFileStream ;
begin
s:=Edit3.Text+Copy(Edit4.Text,1,1) +Copy(Edit5.Text,1,1);
for j:=1 to length(s) do
s[j]:=Translit(s[j])[1];
Memo1.Lines.SaveToFile('db\FormsOrders\'+s);
Data := TFileStream.Create('db\FormsOrders\'+s, fmOpenRead);
ExportDataRes(extractfilepath(Application.ExeName)+'db\FormsOrders\FormsOrders.dll','Order',Format('%.6d',[CheckListBox1.ItemIndex+1]), Data);
Data.Free;
DeleteFile(PChar('db\FormsOrders\'+s));

Но ресурс не добавляется а заменяет существующий!
Пробовал искать но нечего не нашёл ((
Подскажите пожалуйста как это сделать.  
Заранее благодарен!
С уважением,
Volkogriz!
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
MetalFan
Дата 22.7.2013, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Странно... вроде когда с этим ковырялся несколько лет назад, все работало норм... правда ресурс я к экзешнику добавлял...
ты уверен, что добавляемый ресурс еще не существует в файле?

Это сообщение отредактировал(а) MetalFan - 22.7.2013, 11:45


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Volkogriz
Дата 22.7.2013, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 16.9.2007

Репутация: 1
Всего: 1



да уверен!
В CheckListBox=е 100 Пунктов выбираю Пункт 1 добавляю появляотся ресурс 000001 выбираю Пункт2 добовляю, ресурс 000001 затевается и появляется ресурс 000002  
ExportDataRes(extractfilepath(Application.ExeName)+'db\FormsOrders\FormsOrders.dll','Order',Format('%.6d',[CheckListBox1.ItemIndex+1]), Data);
Так что вот так (
--------------------
("`-''-/").___..--''"`-._`6_6  ) ,,,`-.  ( ''' ).` "_-.__.')(_Y_.)'  ._''' )  `._ `. ``-.__'.-'_..`--'_..-_/'''/--'_.' ,'(il).-'''''(li).'  ((!.-'
PM MAIL ICQ   Вверх
MetalFan
Дата 23.7.2013, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Volkogriz, только что проверил под dxe4 все норм, добавляются ресурсы в dll-ку.
у тебя, кстати, похоже Type и Name местами перепутаны.
Переписал немного код функции:
Код

procedure ExportDataRes(const AFilename: string; AResType, AResName : PChar; AData: TBytes);
var
  hFile: NativeUInt;
begin
  if AData = nil then Exit;
  hFile := BeginUpdateResource(PChar(AFilename), False);
  if hFile = 0 then
    RaiseLastOSError;
  try
    if not UpdateResource(hFile, AResType, AResName, 0, Pointer(AData), Length(AData)) then
      RaiseLastOSError;
  finally
    EndUpdateResource(hFile, False);
  end;
end;
Но, в приниципе, один фиг.


тестил так:
Код

var
  lB: TBytes;
begin
  lB := TEncoding.UTF8.GetBytes('teststring13123');
  ExportDataRes('d:\Temp\CompInstall.dll', 'mydata', 'testresource1', lB );
  lB := TEncoding.UTF8.GetBytes('teststring8787');
  ExportDataRes('d:\Temp\CompInstall.dll', 'mydata', 'testresource2', lB );
end;


Все норм, оба ресурса добавляются, ничего не затирается.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.