Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Klasse mit "class var" an DLL übergeben (https://www.delphipraxis.net/134721-klasse-mit-class-var-dll-uebergeben.html)

Win32.API 27. Mai 2009 17:39


Klasse mit "class var" an DLL übergeben
 
Hallo,

mein Problem ist folgendes, wenn ich eine Klasse an eine DLL übergebe und anschließend auf eine class var zugreife stimmt der Wert in der class var nicht. (Ist ja auch logisch, da executable/lib beide die class var in ihrem Data-Segment speichern)

Beispiel:

Deklaration der Klasse:
Delphi-Quellcode:
type
  TFoobar = class
    class var Foo: Integer;
    procedure Bar(I: Integer);
  end;

  TFoobarProc = procedure (MainModule: TFoobar);

procedure TFoobar.Bar(I: Integer);
begin
  writeln(I);
end;
Library:
Delphi-Quellcode:
procedure Init(MainModule: TFoobar);
begin
  MainModule.Bar(MainModule.Foo);
end;

exports
  Init;

Executable
Delphi-Quellcode:
var
  aFoobar: TFoobar;
begin
  aFoobar := TFoobar.Create;
  aFoobar.Foo := 42;
  aFoobar.Bar(aFoobar.Foo);
  TFoobarProc(GetProcAddress(LoadLibrary('lib.dll'), 'Init'))(aFoobar);
  readln;
end.
Ausgabe:
Zitat:

42
0
Wünschenswert wäre es, beide zweimal 42 als Ausgabe zu erhalten.

Kennt einer eine Möglichkeit dies umzusetzen?


Gruß,
Win32

mkinzler 27. Mai 2009 18:02

Re: Klasse mit "class var" an DLL übergeben
 
Keine Klasse im interface benutzen, sondern "flachklopfen" (Methoden als Prozeduren/Funktionen im Interface + Getter/Setter für Eigenschaften; Klasse auf der anderen seite wieder zusammensetzen) oder Interfaces verwenden

himitsu 27. Mai 2009 18:05

Re: Klasse mit "class var" an DLL übergeben
 
du könntes dir eine Funktion anlegen, als Virtual kennzeichnen und über diese die Class-Vars abfragen ... durch das Virtual sollte immer nur die Funktion des Modules (EXE/DLL) aufgerufen werden, in welchem das Objekt erstellt wurde ... hoff ich mal :nerd:

Win32.API 27. Mai 2009 18:14

Re: Klasse mit "class var" an DLL übergeben
 
Zitat:

Zitat von mkinzler
Keine Klasse im interface benutzen, sondern "flachklopfen" (Methoden als Prozeduren/Funktionen im Interface + Getter/Setter für Eigenschaften; Klasse auf der anderen seite wieder zusammensetzen) oder Interfaces verwenden

Wäre auch mein nächster Versuch gewesen, wenn die Methode von himitsu nicht perfekt würde :cyclops:

Zitat:

Zitat von himitsu
du könntes dir eine Funktion anlegen, als Virtual kennzeichnen und über diese die Class-Vars abfragen ... durch das Virtual sollte immer nur die Funktion des Modules (EXE/DLL) aufgerufen werden, in welchem das Objekt erstellt wurde ... hoff ich mal :nerd:

:thumb:
Auf sowas muss man erstmal kommen, tausend dank! :dp:


--Win32

himitsu 27. Mai 2009 18:32

Re: Klasse mit "class var" an DLL übergeben
 
:angel: aber gut, daß ich daruf auch noch hingewiesen wurde ... bei der (schrittweisen) Umstellung meines himXML auf Interfaces hatte ich auch mit einer Modulübergreifenden Object-Verion experimentiert, also auf das Problem mit den Class-Vars wär ich bestimmt auch bald gestoßen -.-°


Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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