AGB  ·  Datenschutz  ·  Impressum  







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

Convert PWideChart to WideString

Ein Thema von fuchsle · begonnen am 30. Jan 2013 · letzter Beitrag vom 30. Jan 2013
Antwort Antwort
fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#1

Convert PWideChart to WideString

  Alt 30. Jan 2013, 08:27
Delphi-Version: XE2
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;

Geändert von fuchsle (30. Jan 2013 um 08:52 Uhr) Grund: Code-Beispiel korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 08:32
Ich habe jetzt nicht so genau hingeschaut, aber vielleicht liegt es daran, dass Du die Konstante 'Path' verwendest statt des übergebenen Parameters?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#3

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 08:51
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.
  Mit Zitat antworten Zitat
fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 09:09
Bin nun folgenden Weg gegangen

svn.GetWCInfo(string(ShortString(Path)), True, True);

sicher nicht der eleganteste, aber es funktioniert und ich kenne keine andere Lösung.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 09:13
Eigentlich sollte deine ursprüngliche Lösung auch funktionieren, aber den Umweg über ShortString würde ich mir ersparen (wenn der überhaupt korrekt ist).

svn.GetWCInfo(string(Path), True, True); sollte es tun.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 10:14
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#7

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 11:38
Eigentlich sollte deine ursprüngliche Lösung auch funktionieren, aber den Umweg über ShortString würde ich mir ersparen (wenn der überhaupt korrekt ist).

svn.GetWCInfo(string(Path), True, True); sollte es tun.

Danke für den Hinweis, aber ohne ShortString geht es bei mir nicht.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 11:44
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
fuchsle

Registriert seit: 22. Jul 2011
Ort: Heilbronn
35 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Convert PWideChart to WideString

  Alt 30. Jan 2013, 15:17
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:21 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