![]() |
D2009: Inkompatible Typen Array und xxx
Ich rufe auf:
Delphi-Quellcode:
Das Attribut sieht so aus:
LinkInfo.FullPathAndNameOfLinkFile:= blablablub
Delphi-Quellcode:
Egal mit was ich ihn füttere. Es kommt immer eine Inkompatibilitätsmeldung.
FullPathAndNameOfLinkFile: array[0..MAX_PATH] of Char;
Grundlegend habe ich einen String den ich da reinschreiben will. EDIT: Selbst wenn ich ihm ein a: array[0..1213] of Char; überreiche mault er rum (dann jedoch nur noch "Inkompatible typen") So sieht der Rest aus:
Delphi-Quellcode:
copymemory(@a[low(a)],@datei[1],sizeof(a));
LinkInfo.FullPathAndNameOfLinkFile := a; |
Re: D2009: Inkompatible Typen Array und xxx
Guten Morgen,
Delphi-Quellcode:
Soweit ich das weiß, sind 0 basierende Arrays zuweisungskompatibel zu (Ansi)Strings.
LinkInfo.FullPathAndNameOfLinkFile:= 'blablablub'
Grüße Klaus |
Re: D2009: Inkompatible Typen Array und xxx
Nur zu ShortStrings
|
Re: D2009: Inkompatible Typen Array und xxx
MAX_PATH <> 1213
das konnte ja nicht gehn FullPathAndNameOfLinkFile := '123123'; geht, da der Compiler die '123123' nicht als String-Konstante, sondern als Array ablegt und dieses dann direkt reinkopieren kann FullPathAndNameOfLinkFile := S; geht nicht S := FullPathAndNameOfLinkFile; das geht aber :mrgreen: , da hier Delphi es sozusagen als PChar ansieht (LStrFromArray) S := PChar(@FullPathAndNameOfLinkFile) also als PChar mit abschließender #0 und/oder einer Maximallänge von Length(FullPathAndNameOfLinkFile) Zitat:
sonst könnte man dieses Array in einem Record verpacken und einen Setter/Getter als StringTypen dafür definieren ... sieht zwar blöder aus, aber läßt sich dann leichter im restlichen Code verwenden :angel2: Von Delphi selber gibt es keine Default-Funktionen, welche zum Befüllen oder Vergleichen des Arrays genutzt werden, da es nicht weiß, wie du den Inhalt interpretierst. |
Re: D2009: Inkompatible Typen Array und xxx
Kann die Definition nach Belieben ändern.
z.B. MaxPath durch eine Zahl ersetzen, aber das hat es auch nicht gebracht. Edit: Hab das komische Array einfach als PChar definiert, jetzt funzt es. Habe jetzt an einer anderen Stelle das Problem dass ich PWideChar nach String umwandeln muss. Ideen? |
Re: D2009: Inkompatible Typen Array und xxx
Zitat:
Nja, ich meinte ob du den Typen einfach verändern kannst oder ob er genau so, als Array, definiert sein muß. Ich hatte mir ein einem Projekt mal so beholfen
Delphi-Quellcode:
dieses entspricht vom Speicher her diesem
TWideString32 = packed Record
Data: Array[1..32] of WideChar; Class Operator Implicit(Const Value: AnsiString): TWideString32; Class Operator Implicit(Const Value: WideString): TWideString32; Class Operator Implicit(Const Value: TWideString32): WideString; Class Operator Equal (Const A: TWideString32; Const B: WideString): Boolean; Class Operator NotEqual(Const A: TWideString32; Const B: WideString): Boolean; End;
Delphi-Quellcode:
der Typ/Record kann jetzt (so wie er hier ist)
TWideString32 = Array[1..32] of WideChar;
Delphi-Quellcode:
und intern wird dann via MoveMemory kopiert.
Rec := S {AnsiString};
Rec := S {WideString/UnicodeString}; S {WideString} := Rec; // und indirekt auch AnsiString if Rec = S {WideString} then if Rec <> S {WideString} then [add] ahhh, ich jetzt hab ich's doch gefunden ... wußte doch, daß es irgendwo mal was gab :angel: [add2] und och noch den Link vergessen :wall: ![]() |
Re: D2009: Inkompatible Typen Array und xxx
Danke für die ausführliche Hilfe.
Konnte es wie gesagt lösen indem ich ne PChar draus gemacht habe. Muss jetzt nur noch ein PWideChar in einen String umwandeln. Ideen? |
Re: D2009: Inkompatible Typen Array und xxx
einfach zuweisen ... die Compilermagic macht den Rest
Delphi-Quellcode:
var S: String; // oder WideString, AnsiString ...
P: PChar; // oder PWideChar, PAnsiChar S := P; |
Re: D2009: Inkompatible Typen Array und xxx
Die Compilermagic ist stark, aber wenn man 2 Strings (PChar und PWideChar) verbinden will löppt das nicht so:
s=string FullPathAndNameOfWorkingDirectroy=PChar FindData.cFileName=PWideChar [delphi}s :=FullPathAndNameOfWorkingDirectroy + FindData.cFileName;[/delphi] "Operator is auf diesen Operandentyp nicht anwendbar" |
Re: D2009: Inkompatible Typen Array und xxx
s:string
FullPathAndNameOfWorkingDirectroy:PChar FindData.cFileName:PWideChar vielleicht geht es ja so:
Delphi-Quellcode:
Grüße
s:= FindData.cFileName;
s:= FullPathAndNameOfWorkingDirectroy +s; Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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