Ok das hab ich soweit verstanden.
Nun noch das letzte Problem: Die bass.dll wird ja noch verwendet. Die muss ich in die Resource als RCDATA mit einbinden zum kompilieren, was ich schon mal getan habe.
Wie kann ich nun zur Laufzeit auf diese zugreifen?
Ich hab schon einiges mit PBTMemoryModule ausprobiert, wo mir Delphi aber nicht wirklich weiterhilft.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
i: byte;
ms: TMemoryStream;
rs: TResourceStream;
m_DLLDataSize: int64;
mp_DllData: Pointer;
btMM: PBTMemoryModule;
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;
**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;
Sowas hab ich schon gefunden, Delphi kann mit PBTMemoryModule nix anfangen.
Kann mir da noch jemand helfen bitte?