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?