AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FastMM/ShareMem für Lazarus?

Ein Thema von I.A · begonnen am 17. Apr 2009 · letzter Beitrag vom 19. Apr 2009
Antwort Antwort
I.A

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

FastMM/ShareMem für Lazarus?

  Alt 17. Apr 2009, 11:45
Hallo,

vor einigen Tagen hab ich ne Frage zu DLLs, erstellt mit Lazarus gestellt. Sollte über Interfaces mit Delphi zu verbinden sein.

Aber gibt es ein Äquivalent für ShareMem bzw. FastMM für Lazarus, wenn Huge Strings oder AnsiStrings übertragen werden sollen bzw. in den von der DLL verwendeten Units verwendet werden?

Die DLL soll mit Lazarus ersstellt und dann mit Delphi verwendet werden. Aber ShareMem bzw FatMM muss sowohl im Projekt als auch in der DLL verwendet werden.

Falls FastMM angepasst werden kann: Müssen in der Lazarus DLL und im Delphi Projekt dann die Versionen der FastMM übereinstimmen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: FastMM/ShareMem für Lazarus?

  Alt 17. Apr 2009, 11:58
Vielleicht hilft Dir das weiter: http://www.freepascal.org/contrib/delete.php3?ID=543
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

Re: FastMM/ShareMem für Lazarus?

  Alt 17. Apr 2009, 12:03
ShareMem nutzt eine DLL und leitet Speicher-Anfragen an diese DLL um ... du könnstest also ganz einfach ebenfalls diese DLL nutzen (allerdings darfst du sie nicht dem FreePascal-Programmteil beilegen, da sie ja Codegear gehört, aber wenn der Delphi-Teil diese DLL mitbringt, dann dürfte es "keine" Probleme geben)


Du müßtests dann nur APIs der ShareMem-DLL implementieren und den MemoryManager des FreePascal-Programms auf diese DLL umleiten.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
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
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
266 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: FastMM/ShareMem für Lazarus?

  Alt 19. Apr 2009, 07:58
Hallo,

hast Du mal probiert, Deine Klasse in ein Projekt zu packen, dieses als Exe zu übersetzen und mit der Exe zu kommunizieren?

Müsste doch über Interfaces klappen. Weiß aber grad nicht, wie man einen gemeinsamen Speicherbreich dabei hinkriegt. Keine Ahnung, ob OLE der Schlüssel zum Erfolg ist.
  Mit Zitat antworten Zitat
I.A

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

Re: FastMM/ShareMem für Lazarus?

  Alt 19. Apr 2009, 14:26
Hallo,

Juuuubellll, ich habb's geschafft. Mir hatte die fpcmemdll.dll gefehlt. Da geht es mit Sharemem.

Die andere Variante mit ExportFPCClass geht auch, aber ist von der Systematik her nicht so schön.

Werd aber mal ein Standardverfahren erarbeiten, das für alle diese Fälle (Kommunikation zwischen Freepascal- und Delphi Programmteilen funktioniert.

@Delphifan2004: Danke für die Anregung. Habe zwar keine Ahnung von OLE. Aber mit Memory Mapped Files könnte die Kommunikation funktionieren.

Welche generellen Probleme gint es außer der Kommunikation zwischen Klassen oder der Übertragung von beliebigen Strings noch zu lösen?

Worauf muss ich bei der Erarbeitung einer Standardlösung noch achten? Oder ist OLE, ActiveX u.a. der Schlüssel zu einer Standardlösung für das Problem der Kommunikation zwischen Klassen im System?

Da ich bei der einfachen Kommunikation zwischen Klassen, die von verschidenen Compilern erstellt wurden einige Probleme zu lösen hatte, denk ich, das die Problematik von allgemeinem Interesse sein könnte. Ist das der Fall?

Was müsste ich in eine Standardbibliothek zur Lösung des Problems unbedingt noch einbauen, damit das Problem allgemeingültig gelöst werden kann, ohne die Verrenkungen bei den Dlls mit Sharemem, FastMM oder ExportClassFPC?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz