AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

chr Funktion in Delphi 2009

Ein Thema von roadrunner-S51 · begonnen am 28. Mai 2010 · letzter Beitrag vom 1. Jun 2010
Antwort Antwort
Seite 1 von 3  1 23      
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#1

chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 09:43
Hallo, bin neu hier, deswegen entschuldigt bitte falls ich hier nicht im richigen Bereich für dieses Thema bin.

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...

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!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 09:47
Hallo,

Du musst anstatt

chr($30+Value); folgendes schreiben:

AnsiChar($30+Value); Ü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
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.081 Beiträge
 
Delphi 12 Athens
 
#3

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 09:50
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#4

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:03
Hey das ging ja schnell! Super, Danke!

@NeutralGeneral: Ok, ich werde mich bessern!

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);
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:12
Welche Zeile ist den die 119?
Markus Kinzler
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#6

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:14
Das ist die oberste als
Delphi-Quellcode:
Result:=GetDefaultCommConfig(@UsedComm[4],CommConfig,i) or
          GetDefaultCommConfig(UsedComm,CommConfig,i);
Die folgenden Codezeilen führen aber zur selben Fehlermeldung.

Habe mir gerade überlegt, die Variable UsedComm ist ja offensichtlich ein Feld. Muss ich das irgendwie umkonvertieren?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:17
Versuch es mal mit PWideChar(UsedComm[4])
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:21
Zitat von mkinzler:
Versuch es mal mit PWideChar(UsedComm[4])
Das Problem könnte evtl sein, dass UsedComm ein Array of AnsiChar ist. der Cast auf PWideChar wird dann für chinesischen String-Müll sorgen fürchte ich. Eine Idee die ich hätte (aber keine Ahnung obs klappt):

PChar(String(AnsiString(@UsedComm[4]))) 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(@UsedComm[4])
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
roadrunner-S51

Registriert seit: 28. Mai 2010
53 Beiträge
 
Delphi 2009 Professional
 
#9

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:23
Das klappt leider nur bedingt. Nun meckert der Compiler bei dem Code nach dem or, also

Delphi-Quellcode:
Result:=GetDefaultCommConfig(PWideChar(UsedComm[4]),CommConfig,i) or
          GetDefaultCommConfig(UsedComm,CommConfig,i);
Die Fehlermeldung bleibt die gleiche.

Jepp, das ist ein AnsiChar-Feld!
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#10

Re: chr Funktion in Delphi 2009

  Alt 28. Mai 2010, 10:25
Zitat von roadrunner-S51:
Das klappt leider nur bedingt. Nun meckert der Compiler bei dem Code nach dem or, also

Delphi-Quellcode:
Result:=GetDefaultCommConfig(PWideChar(UsedComm[4]),CommConfig,i) or
          GetDefaultCommConfig(UsedComm,CommConfig,i);
Die Fehlermeldung bleibt die gleiche.

Jepp, das ist ein AnsiChar-Feld!
Siehe mein Edit obendrüber.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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