Sharemem für Lazarus

Rund um die LCL und andere Komponenten
Antworten
MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Sharemem für Lazarus

Beitrag von MitjaStachowiak »

Hallo,
bin immer noch dabei, meine Delphi-Projekte für Lazarus lauffähig zu machen...

Jetzt hänge ich an ShareMem. FastMM4 geht ja leider schon mal nicht :-(
Ich habe aber hier (http://www.delphipraxis.net/post1027897.html" onclick="window.open(this.href);return false;) gelesen, dass die klassische Variante mit DLL geht. ShareMem kannt Lazarus ja auch.
Aber wo bekomme ich die fpcmemdll.dll her?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Sharemem für Lazarus

Beitrag von theo »

MitjaStachowiak hat geschrieben: Aber wo bekomme ich die fpcmemdll.dll her?
Ich habe keine Ahnung davon und weiss auch nicht ob das Sinn macht.
Aber die Library Source ist bei mir z.B. in C:\lazarus\fpc\2.3.1\source\rtl\win\fpcmemdll.pp
Die DLL könnte man also selber bauen.

S.a.
http://wiki.freepascal.org/shared_libra ... on_details" onclick="window.open(this.href);return false;
http://forum.lazarus.freepascal.org/ind ... l#msg42185" onclick="window.open(this.href);return false;

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Sharemem für Lazarus

Beitrag von MitjaStachowiak »

Achsooo; .pp
Ich hatte nach fpcmemdll.dll und .lpr gesucht...

Hab' jetzt die DLL mal compiliert - scheint zu gehen (Wenn ich erst alle anderen Fehler behoben habe ;-)

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Sharemem für Lazarus

Beitrag von MitjaStachowiak »

Ich habe viel versucht, aber ich komme wieder nicht weiter...
Hab' die fpcmemdll.dll in system32 geschoben und ShareMem überall fleißig eingebunden - geändert hat sich nichts!

Und während die DLLs, die ich noch von Delphi habe wenigstens funktionieren bis ein Speicheraufruf passiert, bleibt bei denen aus Lazarus das Programm immer bei FreeLibrary hängen, egal, ob jetzt ShareMem eingebunden ist oder eine Funktion aus der DLL aufgerufen wurde. Der Debugger zeigt zwar keinen Fehler, lässt sich aber auch nicht mehr beenden, was die Fehlersuche ungemein erschwert...

Ich habe mal vorsichtshalber sämtlichen Code aus der DLL entfernt:

Code: Alles auswählen

library Image;
 
{$mode objfpc}{$H+}
 
uses
  Classes,Windows,
  Messages,
  SysUtils,
  Variants,
  Dialogs,
  d3dx9,
  direct3d9,
  Fortschritt in '..\..\Res\Fortschritt\Fortschritt.pas';
 
 
{$IFDEF WINDOWS}{$R Image.rc}{$ENDIF}
 
type
 TMemInfo = packed record
  P : Pointer;
  Size : integer;
 end;
 
procedure Create(Id : integer; Callback,CallbackInstance :
 Pointer; RTarget : IDirect3DDevice9);
begin
end;
 
function Eval(const Input : Array of Byte) : TMemInfo;
begin
end;
 
function Go(TimePos : cardinal) : Boolean;
begin
end;
 
procedure Render(Flag : integer);
begin
end;
 
procedure Close;
begin
end;
 
exports Create;
exports Eval;
exports Go;
exports Render;
exports Close;
 
end.
Im Programm:

Code: Alles auswählen

var
 test : THandle;
 
(...)
 
 showmessage('start');
 test := LoadLibrary(PChar(ExtractFilePath(ParamStr(0)) + '\Objects\Image.dll'));
 showmessage('mitte');
 FreeLibrary(test);
 showmessage('stop');
Das Message 'stop' wird nicht mehr angezeigt :-(

Kommt zufällig jemandem dieses Problem bekannt vor?


PS: Komisch auch, dass ich in der DLL direct3d9 und d3dx9 einbinden kann, ohne jemals, wie es sonst immer nötig ist, eine Datei aus dem Ordner, in dem ich die habe, zum Projekt hinzugefügt zu haben; statt dessen kann ich anere Units, wie etwa forms, nicht einbinden. Dialogs ist zwar drinnen, im Quellcode der DLL kann ich aber ShowMessage nicht verwenden :?: :?: :?:
Kann es irgendwie sein, dass Lazarus für DLLs noch nicht so ausgefeilt ist?

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Sharemem für Lazarus

Beitrag von MitjaStachowiak »

Nunja - dieses Problem konnte ich ja jetzt lösen (Ohne Dialogs geht's - http://www.lazarusforum.de/viewtopic.php?f=19&t=3858" onclick="window.open(this.href);return false;).

Inzwischen habe ich das meiste übersetzt - konnte jetzt in Lazarus glücklicher Weise sogar noch auf die Speicherverwaltung verzichten...
Jetzt hänge ich noch an einem letzten Problem: In Delphi hatte ich außerdem DLLs erstellt, die ein Fenster erzeugten; mit Buttons, etc. drinnen.
Weil man aber nun die LCL nicht in DLLs verwenden kann, überlege ich, wie ich das am besten mache.

Wer hat einen Tipp?
Soll ich den umständlichen Weg gehen und alle DLLs als Anwendung erzeugen oder gibt es zur LCL eine Alternative? CreateWindow sollte ja funktionieren; gibt es dafür dann auch Buttons, etc. oder darf ich das alles selber machen?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Sharemem für Lazarus

Beitrag von theo »

Naja, in die DLL würde ich eigentlich nur Arbeitscode schmeissen. GUI würde ich da nicht machen.
Wenn du eine Art GUI-Plugin machen willst, würde ich vielleicht auf Scripts ausweichen.
http://wiki.freepascal.org/Pascal_Script" onclick="window.open(this.href);return false;

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Sharemem für Lazarus

Beitrag von MitjaStachowiak »

Hm.. Also Interfaces. Ich werde mir mal Pascal-Script anschauen; währe vermutlich am einfachsten.

Antworten