![]() |
chr Funktion in Delphi 2009
Hallo, bin neu hier, deswegen entschuldigt bitte falls ich hier nicht im richigen Bereich für dieses Thema bin. :oops:
Also ich schreibe gerade meine Bachelor-Arbeit und muss ein Delphiprogramm, erstellt in Turbo Delphi auf Delphi 2009 "umrüsten". Das ist soweit kein großes Problem, außer die Kommunikation über den COM-Port. Dort wird die chr-Funktion verwendet, welche, soviel habe ich nun schon gelernt, statt einem char ein Unicode-Zeichen zurückgibt. Könnte mir also bitte jemand helfen die folgenden Code-Zeilen funktionsfähig umzubauen? Ich komm da irgendwie nicht auf nen grünen Zweig... :gruebel: UsedComm[3]:=chr($30+Value); H:=CreateFile(UsedComm,GENERIC_READ or GENERIC_WRITE, 0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); Die Fehlermeldung von Delphi lautet: [DCC Fehler] HESerial32.pas(104): E2010 Inkompatible Typen: 'AnsiChar' und 'Char' Hier der Code ringsum das Problem: var UsedComm : array[0..12] of ansichar = 'COMx'#0#0; ... begin ... if Value<10 then begin UsedComm:='COMx'+#0; UsedComm[3]:=chr($30+Value); end else begin UsedComm:='\\.\COMx'+#0+#0; UsedComm[7]:=chr($30+(Value div 10)); UsedComm[8]:=chr($30+(Value mod 10)); end; end; Schonmal Danke! |
Re: chr Funktion in Delphi 2009
Hallo,
Du musst anstatt
Delphi-Quellcode:
folgendes schreiben:
chr($30+Value);
Delphi-Quellcode:
Übrigens: Um deinen Code kannst du Delphi-Tags machen [.delphi] und [./delphi] (jeweils ohne den Punkt). Dann wird man nicht ganz so blind wenn man versucht deinen Code zu lesen :mrgreen:
AnsiChar($30+Value);
|
Re: chr Funktion in Delphi 2009
Chr = Char = WideChar (ab Delphi 2009) = AnsiChar (bis Delphi 2007)
Wenn du also explizit AnsiString/AnsiChar verwendest, dann mußt du deinen Wert auch explizit nach AnsiChar casten. |
Re: chr Funktion in Delphi 2009
Hey das ging ja schnell! Super, Danke!
@NeutralGeneral: Ok, ich werde mich bessern! :wink: Nun hab ich nur leider das nächste Proglem: [DCC Fehler] HESerial32.pas(119): E2010 Inkompatible Typen: 'Array' und 'PWideChar' Der Code dazu:
Delphi-Quellcode:
Result:=GetDefaultCommConfig(@UsedComm[4],CommConfig,i) or
GetDefaultCommConfig(UsedComm,CommConfig,i); H:=CreateFile(UsedComm,GENERIC_READ or GENERIC_WRITE, 0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); H:=CreateFile(UsedComm, GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, 0); |
Re: chr Funktion in Delphi 2009
Welche Zeile ist den die 119?
|
Re: chr Funktion in Delphi 2009
Das ist die oberste als
Delphi-Quellcode:
Die folgenden Codezeilen führen aber zur selben Fehlermeldung.
Result:=GetDefaultCommConfig(@UsedComm[4],CommConfig,i) or
GetDefaultCommConfig(UsedComm,CommConfig,i); Habe mir gerade überlegt, die Variable UsedComm ist ja offensichtlich ein Feld. Muss ich das irgendwie umkonvertieren? |
Re: chr Funktion in Delphi 2009
Versuch es mal mit PWideChar(UsedComm[4])
|
Re: chr Funktion in Delphi 2009
Zitat:
Delphi-Quellcode:
Allerdings könnte die Funktion auch einen Ansistring wollen und hat aus "früheren" Zeiten noch "PChar" als Parametertyp definiert. Für diesen Fall müsste mkinzler Recht haben. (Bzw. bei dir fehlt noch ein @ vor dem UsedComm[4]) D.h.:
PChar(String(AnsiString(@UsedComm[4])))
Delphi-Quellcode:
PChar(@UsedComm[4])
|
Re: chr Funktion in Delphi 2009
Das klappt leider nur bedingt. Nun meckert der Compiler bei dem Code nach dem or, also
Delphi-Quellcode:
Die Fehlermeldung bleibt die gleiche.
Result:=GetDefaultCommConfig(PWideChar(UsedComm[4]),CommConfig,i) or
GetDefaultCommConfig(UsedComm,CommConfig,i); Jepp, das ist ein AnsiChar-Feld! |
Re: chr Funktion in Delphi 2009
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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