Einzelnen Beitrag anzeigen

CherryDT

Registriert seit: 28. Apr 2010
5 Beiträge
 
#7

Re: Strings und DLL - OnCreate abfangen - und andere Problem

  Alt 28. Apr 2010, 17:47
Hurraaaaa!

Das mit dem Memory Manager hat mein erstes Problem gelöst.

Ich mache das jetzt so:

FreeBASIC-Code:
Code:
' gets pointer to Delphi's memory manager
Function GetMemoryManager() As TMemoryManager Ptr
   #Define UNKNOWN &hCC
   Dim pattern(...) As UByte = {&h53, &h85, &hC0, &h7E, &h15, &hFF, &h15, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, _
      &h8B, &hD8, &h85, &hDB, &h75, &h0B, &hB0, &h01, &hE8, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, &hEB, &h02, _
      &h33, &hDB, &h8B, &hC3, &h5B, &hC3}
   Dim j As Integer = 0
   For i As UByte Ptr = &h401000 To &h40F000 Step 1
      If pattern(j) = UNKNOWN OrElse *i = pattern(j) Then
         j += 1
         If j > UBound(pattern) Then Return *CPtr(TMemoryManager Ptr Ptr, i - UBound(pattern) + 7)
      Else
         j = 0
      EndIf
   Next
   Return NULL
End Function
So kriege ich den Memory Manager der EXE.

In der DLL hab ich jetzt diese Funktion, die ich dann aufrufe: Ultimate_SetMemoryManager(GetMemoryManager())

Delphi-Quellcode:
function Ultimate_SetMemoryManager(memmgr: PMemoryManager): Boolean; stdcall;

begin
  Result := false;
  SetMemoryManager(memmgr^);
  Result := true;
end;
Übrigens: mich wundert, warum es ShareMem und sonstwelche Units dafür gibt, wenn es reichen würde, dass die DLL eine SetDLLMemoryManager-Funktion exportiert und man in der EXE dann einfach SetDLLMemoryManager(GetMemoryManager()) macht.

Danke Leute!

Problem 1 ist somit endlich gelöst!

Jetzt bleiben allerdings noch Problem 2 und 3!

mfG Cherry
  Mit Zitat antworten Zitat