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

Вниз

Resources   Найти похожие ветки 

 
Aga ©   (2004-03-07 17:43) [0]

кто-то знает как записать в чужой ехе таблицу строк из своего?(предполагаю UpdateResource,RT_STRING но как?).Если можно примерчик?


 
Rouse_ ©   (2004-03-07 18:48) [1]

//------------------------------------------------------------------------------
//
//  Пример использования ресурсов для хранения в них текстовой информации.
//
//  (с) Филиппов Владимир. 2002.
//  damageinc@sbor.ru
//
//------------------------------------------------------------------------------

unit Main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, Buttons;

type
 TMainFrm = class(TForm)
   Memo: TMemo;
   BitBtn1: TBitBtn;
   BitBtn2: TBitBtn;
   StaticText1: TStaticText;
   procedure BitBtn1Click(Sender: TObject);
   procedure FormResize(Sender: TObject);
   procedure BitBtn2Click(Sender: TObject);
 private
   iniDLL:array of byte;
   procedure UpdateMemo;
   function WriteToResource:boolean;
 public
   { Public declarations }
 end;

var
 MainFrm: TMainFrm;

implementation

{$R *.DFM}

procedure TMainFrm.BitBtn1Click(Sender: TObject);
var
hLib:HINST;
hFile,hN:THandle;
p:pointer;
begin
SetLength(iniDLL,0);
//грузим либу:
hLib:=LoadLibrary("MyDLL.dll");
if hLib<>0 then
   begin
    //находим pесурс в ней
    hFile:=FindResource(hLib,"MYFILE",RT_RCDATA);
    if hFile<>0 then
       begin
        //загружаем его
        try
         hN:=LoadResource(hLib,hFile);
         //получаем указатель на первый байт
         p:=LockResource(hN);
         SetLength(iniDLL,SizeofResource(hLib,hFile));
         if Length(iniDLL)>0 then CopyMemory(@iniDLL[0],p,Length(iniDLL));
        except
         ShowMessage("Библиотека повреждена!!!")
        end;
       end else
       begin
        ShowMessage("Не найден ресурс.");
       end;
    //выгружаем либу, чтобы можно было в неё писать
    FreeLibrary(hLib);
    UpdateMemo;
   end else ShowMessage("Библиотека не найдена!!!");
end;

procedure TMainFrm.UpdateMemo;
var
i,k:integer;
s:string;
begin
Memo.Clear;
i:=0;
while i<High(iniDLL) do
 begin
  k:=i;
  while (i<=High(iniDLL))and(iniDLL[i]<>$D)and(iniDLL[i+1]<>$A) do inc(i);
  SetLength(s,i-k);
  CopyMemory(@s[1],@iniDLL[k],i-k);
  Memo.Lines.Add(s);
  inc(i,2);
 end;
end;

function TMainFrm.WriteToResource:boolean;
var
hLib:THandle;
ErrStr: array [0..MAX_PATH] of Char;
begin
hLib:=BeginUpdateResource("MyDLL.dll",false);
if hLib = 0 then
begin
   FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM,
                   nil,
                   GetLastError,
                   0,
                   @ErrStr[0],
                   MAX_PATH,
                   nil);
   ShowMessage(String(ErrStr));
   Exit;
end;
if Length(iniDLL)>0 then Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,@iniDLL[0],Length(iniDLL))
   else Result:=UpdateResource(hLib,RT_RCDATA,"MYFILE",0,nil,0);
EndUpdateResource(hLib,false);
end;

procedure TMainFrm.FormResize(Sender: TObject);
begin
StaticText1.Repaint;
end;

procedure TMainFrm.BitBtn2Click(Sender: TObject);
var
i,k:integer;
begin
SetLength(iniDLL,0); k:=0;
for i:=0 to Memo.Lines.Count-1 do
    begin
     SetLength(iniDLL,Length(iniDLL)+Length(Memo.Lines[i])+2);
     if Length(Memo.Lines[i])>0 then CopyMemory(@iniDLL[k],@Memo.Lines[i][1],Length(Memo.Lines[i]));
     iniDLL[k+Length(Memo.Lines[i])]:=$D;
     iniDLL[k+Length(Memo.Lines[i])+1]:=$A;
     inc(k,Length(Memo.Lines[i])+2);
    end;
if not WriteToResource then ShowMessage("Не удаётся произвести запись в библиотеку.");
end;

end.


 
aga ©   (2004-03-07 19:50) [2]

спасибо но что-то не совсем понятно... я вообще-то умею записывать данные с помощью UpdateResource, но вот с RT_STRING проблемы



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

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

Наверх




Память: 0.47 MB
Время: 0.022 c
14-1078927826
Yurchik
2004-03-10 17:10
2004.04.04
Нужен uses CommonFunc.pas(.dcu). Помогите плиииссс.


7-1076689383
DelphiN!
2004-02-13 19:23
2004.04.04
Отсылка сообщения безоконной программе


14-1078606820
Nikolay M.
2004-03-07 00:00
2004.04.04
Я не знаю что они курят...


14-1078704757
Rouse_
2004-03-08 03:12
2004.04.04
С Днем Рождения 8 Марта


7-1074070027
Taras
2004-01-14 11:47
2004.04.04
Добавление в реестр нестроковых переменных