Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Übergabe eines Records in eine andre Unit (https://www.delphipraxis.net/104151-uebergabe-eines-records-eine-andre-unit.html)

Overburn 28. Nov 2007 08:18


Übergabe eines Records in eine andre Unit
 
Morgen,

also ich habe folgendes Problem:
Es exisitieren 2 Units. In der einen Unit gibt es einen record, welcher befüllt wird. Dieser soll dann an eine andere Unit zur Bearbeitung weitergeleitet werden:
Deklaration des Recordtyps
Delphi-Quellcode:
type
  tRecForwarder = record
    OrderId: string;
    NextState: Integer;
    WwwRootDir:String;
    FtpRootDir: string;
    PortalDir:String;
    PdfDir: string;
    ForwarderDir: string;
    Sid:String;
    Order:TStringList;
    Pickup:Boolean;
    Lnd:String;
    AdrPickup:String;
    AdrForwarder:String;
    AdrDelivery:String;
    SaveOrder:Boolean;
  end;
Hier wird er befüllt und die Unit ausgewählt und aufgerufen:

Delphi-Quellcode:
function ForwarderCommunication(iRecForwarder: tRecForwarder): string;
var
  temp: string;
begin
  Result := '';
  with iRecForwarder do begin
    Order:=TStringList.Create;
    ws:=GetIRtsService(True);
    Order.Text:=ws.Orders_GetData(Sid,OrderId);
    SaveOrder:=False;
    if (NextState=17) then begin
      Pickup:=True;
      AdrPickup:='Adr31';
      AdrForwarder:='Adr32';
      AdrDelivery:='Adr33';
    end else begin
      Pickup:=False;
      AdrPickup:='Adr41';
      AdrForwarder:='Adr42';
      AdrDelivery:='Adr43';
    end;
    try
       if temp = '1' then Intf1.GenerateOrder( var irecforwarder);
       if temp = '2' then Intfd2.GenerateOrder(var iRecForwarder);
Hier der Aufruf in der entsprechenden Unit:
Delphi-Quellcode:
preocedure GenerateDHLOrder( var myforwarder:trecforwarder);
Die Deklaration von trecforwarder ist in beiden Units die gleiche.,
Beim kompilieren erhalte ich folgende Fehlermeldung:
Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.

Könnt ihr mir hier helfen?

Gruß,
Stefan

DeddyH 28. Nov 2007 08:23

Re: Übergabe eines Records in eine andre Unit
 
Lass mal die vars beim Aufruf weg.
Delphi-Quellcode:
try
       if temp = '1' then Intf1.GenerateOrder( irecforwarder);
       if temp = '2' then Intfd2.GenerateOrder( iRecForwarder);

Overburn 28. Nov 2007 08:27

Re: Übergabe eines Records in eine andre Unit
 
Das hab ich auch schon überlegt.
Lasse ich das Var weg, bekomme ich die Meldung, dass die Typen inkompatibel sind.
Leider brauch ich die Werte des Records wieder in der anderen Unit.

Gruß,
STefan

PMM 28. Nov 2007 08:35

Re: Übergabe eines Records in eine andre Unit
 
Aus "die Deklaration ist in beiden Units gleich" schliesse ich mal, dass du den Recordtype doppelt definiert hast. Damit hast du dann auch 2 unterschiedliche Typen (auch wenn diese identisch aussehen). Du solltest also den Typ nur einmal, in einer der beiden (oder in einer gemeinsam genutzten 3. Unit) definieren, dann ist das sauber und wird wohl auch funktionieren.
PMM

Overburn 28. Nov 2007 08:41

Re: Übergabe eines Records in eine andre Unit
 
Hi,

@PMM:
Genau das hab ich gerad gemacht und jetzt läuft es. Danke! :)

Gruß,
Stefan


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz