Hallo,
da ich wirklich lange danach gesucht habe und immer nur übermäßig langen, für mich unverständlichen Code stoß, hier mal eine Lösung:
Wie binde ich eine DLL als Resource ein?
- Editor öffnen und "<DemoNameAufruf> RCDATA <DemoDatei.dll>" hineinschreiben.
Bsp.: DllDatei RCDATA MeineDll.dll
- Diese Datei als .RC-Datei speichern. (Bsp.: Resources.RC)
- CMD öffnen (Start->Ausführen->cmd.exe->Return) und in das Verzeichnis der .RC-Datei navigieren.
- In die Konsole eintippen: BRCC32 <rcDatei.RC>
Bsp.: BRCC32 Resources.RC
- Nun sollte eine .RES-Datei im gleichen Verzeichnis entstanden sein.
- In einer Unit nun noch "{$R *.DFM} {$R <resourcename>.RES}" eintragen (Bsp.: {$R *.DFM} {$R Resources.RES}) und fertig.
Bitte trage diese Compiler-Direktive nach der From direktive und vor dem Implementation Schlüsselwort ein.
Nun zum eigentlichen Threadthema, wie kann ich diese DLL nun aufrufen, ohne sie vorher auf dem Dateisystem zu droppen, also direkt aus dem Speicher laden?
Um die Datei aus den Resourcen zu laden:
Delphi-Quellcode:
var
ms : TMemoryStream;
rs : TResourceStream;
begin
if 0 <> FindResource(hInstance, 'DllDatei', RT_RCDATA) then
begin
rs := TResourceStream.Create(hInstance, 'DllDatei', RT_RCDATA);
ms := TMemoryStream.Create;
try
ms.LoadFromStream(rs);
ms.Position := 0;
m_DllDataSize := ms.Size;
mp_DllData := GetMemory(m_DllDataSize);
ms.Read(mp_DllData^, m_DllDataSize);
finally
ms.Free;
rs.Free;
end;
end;
end;
Nun ist die
DLL in den Speicher geladen!
So benutzt man die
DLL nun:
Delphi-Quellcode:
var
btMM: PBTMemoryModule;
begin
btMM := BTMemoryLoadLibary(mp_DllData, m_DllDataSize);
try
if btMM =
nil then Abort;
@m_TestCallstd := BTMemoryGetProcAddress(btMM, '
TestCallstd');
if @m_TestCallstd =
nil then Abort;
m_TestCallstd('
Das ist ein DLL-Speicher Aufruf!');
except
Showmessage(Ein Fehler ist enstanden bei Aufruf der
DLL : '
+ BTMemoryGetLastError);
end;
if Assigned(btMM) then BTMemoryFreeLibrary(btMM);
end;
Ich hoffe für den ein oder anderen war das eine Hilfe!
Quelle:
http://delphi.about.com/od/windowssh...nto-memory.htm
Download .PAS:
https://github.com/jasonpenny/democo...ter/dGinaTest/