hallo miteinander,
ich habe im moment ne kleine anwendung geschrieben, die mir eine resource in eine andere anwendung schreibt.
sieht i prinzip so aus:
Delphi-Quellcode:
ExeName := OpenDialog1.FileName;
resHandle := BeginUpdateResource(@ExeName[1],false);
if resHandle <> 0 then
try
mStream.Position := 0;
memAddr := mStream.Memory;
ResInfo := FindResource(resHandle,PChar('Name'),RT_RCDATA);
err := ResInfo = 0;
if not err then
begin
err := not UpdateResource(resHandle,RT_RCDATA,PChar('Name'),LANG_NEUTRAL,
nil,SizeOfResource(resHandle,ResInfo));
FreeResource(ResInfo);
end;
err := not UpdateResource(resHandle,RT_RCDATA,PChar('Name'),LANG_NEUTRAL,
mStream.Memory,mStream.Size);
if not err then
ShowMessage('Resource succesfully included')
else
MessageDlg('Error including resource to: ' + ExeName + #13 +
'Message: ' + sysErrorMessage(GetLastError),mtError,[mbOk],0);
finally
EndUpdateResource(resHandle,err);
end
else
MessageDlg('Error including resource to: ' + ExeName + #13 +
'Message: ' + sysErrorMessage(GetLastError),mtError,[mbOk],0);
klappt auch soweit alles ganz gut. wenn diese .exe ausgeführt wird, kann sie checken ob die in "Name" angegebene resource verfügbar ist und sie gegebenenfalls laden.
mein problem ist nun aber, dass bei einer neukompilierung diese resource ja wieder abhanden kommt, sie hat ja primär erstmal nichts in der exe zu suchen.
ist es nun möglich das ganze dauerhaft zu injezieren? so dass es auch bei einer neukompilierung nicht verloren geht?
hab mir schon überlegt in der entsprechenden anwendung via
{$ *.res}
eine externe resourcendatei einzubinden und in diese dann die injezierte resource auch reinzuschreiben. nur, geht das überhaupt? funktioniert ein konstrukt a la:
- lade die gerade injezierte resource in einen resourcestream und speichere diesen in eine entsprechende .res datei
- benutze einen compilerschalter um zu schauen ob die resourcendatei verfügbar ist
viele grüße