Текущий архив: 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