Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Convert PWideChart to WideString (https://www.delphipraxis.net/172949-convert-pwidechart-widestring.html)

fuchsle 30. Jan 2013 07:27

Delphi-Version: XE2

Convert PWideChart to WideString
 
Hallo liebe Gemeinde,

da ich eine DLL schreibe die Informationen zwischen 2 Programmen austauschen muss habe ich die Datentypen PWideChar und WideString fest vorgegeben.
Als Parameter bekomme ich PChar und muss diesen als WideString weiterreichen.

Dabei scheint es Konvertierungsfehler zu geben, aktuell habe ich leider nichts zu diesem Problem gefunden.
Wie Konvertiere ich einen PChar korrekt zu einem WideString?


Vielen Dank.

Delphi-Quellcode:
function svnrevision(Path: PChar): Integer; stdcall;
var
  svn: ISubWCRev;
begin
  svn := CoSubWCRev.Create;
  try
    svn.GetWCInfo(WideString(Path), True, True);
    Result := StrToInt(svn.revision);
  finally
    svn := nil;
  end;
end;

DeddyH 30. Jan 2013 07:32

AW: Convert PWideChart to WideString
 
Ich habe jetzt nicht so genau hingeschaut, aber vielleicht liegt es daran, dass Du die Konstante 'Path' verwendest statt des übergebenen Parameters?

fuchsle 30. Jan 2013 07:51

AW: Convert PWideChart to WideString
 
Zitat:

Zitat von DeddyH (Beitrag 1201247)
Ich habe jetzt nicht so genau hingeschaut, aber vielleicht liegt es daran, dass Du die Konstante 'Path' verwendest statt des übergebenen Parameters?

Sorry, war ein Fehler beim Einstellen, ich nutze natürlich den Parameter.
Hatte zwischendurch den Pfad fest eingetippt, daher das Überbleibsel.

fuchsle 30. Jan 2013 08:09

AW: Convert PWideChart to WideString
 
Bin nun folgenden Weg gegangen

Delphi-Quellcode:
svn.GetWCInfo(string(ShortString(Path)), True, True);


sicher nicht der eleganteste, aber es funktioniert und ich kenne keine andere Lösung.

Uwe Raabe 30. Jan 2013 08:13

AW: Convert PWideChart to WideString
 
Eigentlich sollte deine ursprüngliche Lösung auch funktionieren, aber den Umweg über ShortString würde ich mir ersparen (wenn der überhaupt korrekt ist).

Delphi-Quellcode:
svn.GetWCInfo(string(Path), True, True);
sollte es tun.

ChrisE 30. Jan 2013 09:14

AW: Convert PWideChart to WideString
 
Hi,

es passt vielleicht nicht 100% zum Problem, aber ich würde bei solchen Funktionen die in einer DLL per Export arbeiten und auch bei der Deklaration in den Programmen auf "veränderliche Typen" wie PChar verzichten. Lieber die expliziten Typen wie in diesem Fall PAnsiChar oder PWideChar. PChar kann ja je nach Entwicklungsumgebung was anderes sein.

Gruß, Chris

fuchsle 30. Jan 2013 10:38

AW: Convert PWideChart to WideString
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1201259)
Eigentlich sollte deine ursprüngliche Lösung auch funktionieren, aber den Umweg über ShortString würde ich mir ersparen (wenn der überhaupt korrekt ist).

Delphi-Quellcode:
svn.GetWCInfo(string(Path), True, True);
sollte es tun.


Danke für den Hinweis, aber ohne ShortString geht es bei mir nicht.

ChrisE 30. Jan 2013 10:44

AW: Convert PWideChart to WideString
 
Zitat:

Zitat von fuchsle (Beitrag 1201293)
Danke für den Hinweis, aber ohne ShortString geht es bei mir nicht.

Das deutet eigentlich immer mehr darauf hin, dass es kein PChar sondern ein PAnsiChar ist. Und das casten auf ShortString könnte hier zum Datenverlust führen, da ShortString ein AnsiString[255] ist. Ich würde die Deklaration auf PAnsiChar ändern und den Cast auf AnsiString.
Delphi-Quellcode:
function svnrevision(Path: PAnsiChar): Integer; stdcall;
var
  svn: ISubWCRev;
begin
  svn := CoSubWCRev.Create;
  try
    svn.GetWCInfo(WideString(AnsiString(Path)), True, True);
    Result := StrToInt(svn.revision);
  finally
    svn := nil;
  end;
end;
Gruß, Chris

fuchsle 30. Jan 2013 14:17

AW: Convert PWideChart to WideString
 
Die Schnittstelle der Fremdsoftware verwendet nach Dokumentation angeblich ShortString also einen String mit fester Größe von 255. Könnte sein, dass meine TypeCast daher klappt und bisher zu keinen Verlusten geführt hat.

Leider muss ich sagen, dass die Kollegen mit der Dokumentation nicht auf dem Laufenden sind. Aber mit diesem Problem bin ich ja nicht alleine.


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