Einzelnen Beitrag anzeigen

I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#4

Re: FastMM/ShareMem für Lazarus?

  Alt 19. Apr 2009, 06:58
Hallo,

Danker erst mal für Eure Antworten. Leider hilft keiner der Tipps. Ich erhalte nach wie vor eine EAccessviolation.

Die Unit Sharemem gibt es auch für Freepascal. Die Delphi Unit kann leider nicht einfach angepasst werden, weil die TMemorymanager-Records unterschiedlich definiert sind.

Delphi-Quellcode:
type
  //Delphi Definition
  PMemoryManager = ^TMemoryManager;
  TMemoryManager = record
    GetMem: function(Size: Integer): Pointer;
    FreeMem: function(P: Pointer): Integer;
    ReallocMem: function(P: Pointer; Size: Integer): Pointer;
  end;

  //Freepascal Definition
  PMemoryManager = ^TMemoryManager;
  TMemoryManager = record
    NeedLock : boolean;
    Getmem : Function(Size:ptrint):Pointer;
    Freemem : Function(p:pointer):ptrint;
    FreememSize : Function(p:pointer;Size:ptrint):ptrint;
    AllocMem : Function(Size:ptrint):Pointer;
    ReAllocMem : Function(var p:pointer;Size:ptrint):Pointer;
    MemSize : function(p:pointer):ptrint;
    GetHeapStatus : function :THeapStatus;
    GetFPCHeapStatus : function :TFPCHeapStatus;
  end;

  //Zusätzlich für Delphi aber nicht für Freepascal
  PMemoryManagerEx = ^TMemoryManagerEx;
  TMemoryManagerEx = record
    {The basic (required) memory manager functionality}
    GetMem: function(Size: Integer): Pointer;
    FreeMem: function(P: Pointer): Integer;
    ReallocMem: function(P: Pointer; Size: Integer): Pointer;
    {Extended (optional) functionality.}
    AllocMem: function(Size: Cardinal): Pointer;
    RegisterExpectedMemoryLeak: function(P: Pointer): Boolean;
    UnregisterExpectedMemoryLeak: function(P: Pointer): Boolean;
  end;
  //Die letztere wird von Delphi-ShareMem verwendet
Ich fociere deshalb den Tipp von DeddyH -> http://www.freepascal.org/contrib/delete.php3?ID=543
Doch leider erhalte ich auch hier eine EAccessviolation.

Da sind bei mir folgende Fragen entstanden:

Wen ich eine Freepascal Komponente von Delphi aus ansprechen und damit kommunizieren will:

1). Ist der Owner der Komponente dann NIL oder Application?

2). TMemoryManager ist unterschiedlich definiert in Freepascal/Delphi. Kann eine Dll mit Klasse
damit überhaupt funktionieren, wenn die Klasse in der DLL mit Freepascal übersetzt ist aber mit Delphi weiter verwendet werden soll?
  Mit Zitat antworten Zitat