Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Daten von DLL van Hauptanwendung schicken (https://www.delphipraxis.net/204867-daten-von-dll-van-hauptanwendung-schicken.html)

js747a 8. Jul 2020 14:53

Daten von DLL van Hauptanwendung schicken
 
In meinem Programm geschrieben mit Delphi 7 kommuiziere ich mit einer Modellbahnzentrale(IntellyBox)
Unter Delphi 7 geht alles wunderbar.
In Delphi 10.3 geht es nicht. Immer wieder sind die Daten von der IntellyBox nicht in ordnung.
Ich möchte in delphi 7 die Unit zur Communication mit der Zentrale in eine DLL auslagern und dann in meinem Programm in Delphi 10.3 gebrauchen.
Ich habe erstmal ein Kleines Programm zum Testen geschrieben.

***DLL
unit DLLUnit;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type

TDllForm = class(TForm)
Button1: TButton;
Label1: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;

type
String30= String[30];

var
DllForm: TDllForm;

function ZeigeForm(S : String30): Boolean; export;
procedure ZeigeTextInDLL(S : String30); export;

implementation

{$R *.DFM}

function ZeigeForm(S : String30): Boolean; export;
Begin
DllForm:=TDllForm.Create(NIL);
DllForm.Show;
DllForm.Label1.Caption := S;
End;

procedure ZeigeTextInDLL(S : String30); export;
Begin
DllForm.Label1.Caption := S;
End;

end.

***ZeigeForm offnet die DLLForm
***ZeigeTextInDLL zeigt den Text von der Hauptanwendung in Label1 der DllForm

***Hauptanwendung
unit HAUPTUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
String30= String[30];

THauptForm = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
HauptForm: THauptForm;

implementation

function ZeigeForm(S : String30): Boolean; external 'PROJECTDLL.DLL';

procedure ZeigeTextInDLL (S : String30); external 'PROJECTDLL.DLL';

{$R *.DFM}

procedure THauptForm.Button1Click(Sender: TObject);
var x : Boolean;
begin
x := ZeigeForm(Label1.Caption);
end;


procedure THauptForm.Button2Click(Sender: TObject);
begin
ZeigeTextInDLL ('Text Von HauptForm Button2');
end;

end.

***Button1Click ofnnet die DLLForm
***Button2Click Zeigt den Text ('Text Von HauptForm Button2') an in DLLForm

Ich kann Daten von dem Hauptprogramm in der DLLForm anzeigen. (THauptForm.Button2Click)

Aber ich bekomme es nicht hin Daten von der DLLForm an das Hauptprogramm zu schicken.

freimatz 8. Jul 2020 15:47

AW: Daten von DLL van Hauptanwendung schicken
 
Hallo, bitte formatiere deinen Code. gehe auf Bearbeiten dann hat es oben so ein Symbol mit dem römischen Helm

hoika 8. Jul 2020 16:02

AW: Daten von DLL van Hauptanwendung schicken
 
Hallo,
ersetze mal String30 durch AnsiString oder UnicodeString oder ShortString, wobei String[30] ShortString sein müsste;

Das Problem ist, dass Strings unter neueren Delphi-Versionen anders gehandhabt wird wie unter D7.
Einfach mal diversen Stringtypen hantieren.
Im Zweifel PAnsiChar benutzen.


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