Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String in ein PAnsiChar? (https://www.delphipraxis.net/176709-string-ein-pansichar.html)

milos 21. Sep 2013 22:16

String in ein PAnsiChar?
 
Hallo,
ich benutze für eine Anwendung die Bibliothek LibXL zum auslesen der Excel Tabellen. (Oder würde es gerne...)

Das Problem ist, dass ich bei der Methode zum laden der Excel Datei ein "PAnsiChar" als Argument benötige. Zum sehen ist das noch in der Dokumentation von LibXL.

Wenn ich die Methode so schreibe
Delphi-Quellcode:
WorkBook.Load('Datei.xls');
funktioniert es ohne Probleme.

Aber sobald ich es jetzt zum Beispiel von
Delphi-Quellcode:
FileOpenDialog.FileName;
oder einem anderen String oder AnsiString hole funktioniert es nicht.
Auch wenn ich
Delphi-Quellcode:
PAnsiChar(FileOpenDialog.FileName);
mache geht es nicht, denn ich bekomme dann ja logischerweise nur ein Zeichen.

Kann mir einer weiterhelfen?

MfG

jaenicke 21. Sep 2013 22:49

AW: String in ein PAnsiChar?
 
Du musst zuerst in einen AnsiString umwandeln und dann in einen PAnsiChar:
Delphi-Quellcode:
PAnsiChar(AnsiString(FileOpenDialog.FileName))
.
(es funktioniert aber meistens auch mit dem Cast wie du ihn hattest, weil das Delphi korrekt behandelt, Compiler Magic, aber besser ist das richtig auszuschreiben)

milos 21. Sep 2013 23:53

AW: String in ein PAnsiChar?
 
Vielen dank, so funktioniert es perfekt!
Gibt es dafür eine Erklärung? o_O

MfG

jaenicke 22. Sep 2013 08:36

AW: String in ein PAnsiChar?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wenn du schreibst PAnsiChar(), macht Delphi intern nicht immer einen reinen Cast, sprich es passiert beim Cast auf AnsiString auch eine entsprechende Umwandlung (Compiler Magic). Das passiert aber nicht (oder jedenfalls nicht immer, ich dachte das schon mal gesehen zu haben), wenn es schon ein AnsiString ist:

Anhang 39906

Die darin aufgerufenen Funktionen sehen so aus:
Delphi-Quellcode:
procedure _LStrFromUStr(var Dest: _AnsiStr; const Source: UnicodeString; CodePage: Word);
function _LStrToPChar(const S: _AnsiStr): _PAnsiChr;

milos 23. Sep 2013 17:12

AW: String in ein PAnsiChar?
 
Ahhh ok ^^
Danke für die erklärung, nun vergess ich es bestimmt nicht mehr ^^

MfG


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