AGB  ·  Datenschutz  ·  Impressum  







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

PChar schneidet letztes Zeichen ab

Ein Thema von TheMiller · begonnen am 6. Okt 2006 · letzter Beitrag vom 7. Okt 2006
Antwort Antwort
Seite 2 von 3     12 3      
mkinzler
(Moderator)

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

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:07
Zitat:
ShowMessage(PChar(GetInstallDir));
Ist doch schon PChar?
Markus Kinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:08
Du konvertierst den String temporär zu einem PChar und gibst ihn per Result zurück. Problem dabei ist, dass die Typkonvertierung nur temporär ist und nach verlassen der Funktion ist der Speicher wo der PChar angelegt wurde ungültig. Daher ist es kein Wunder, dass die Daten nicht mehr stimmen. Es ist eher erstaunlich das der PChar soweit noch lesbare Zeichen enthält.

Ich empfehle dir eine andere Art der Stringübergabe: Besorg dir Speicher für den PChar im Hauptprogramm und übergebe diesen samt der Angabe der Länge an die DLL Funktion, welche den Buffer befüllt, wenn er genügend Platz bietet.

Beispiel dazu:
Delphi-Quellcode:
  // Hauptprogramm:
Procedure xy;
Var
  lString: String;
Begin
  SetLength(lString, 2048);
  SetLength(lString, DeineDLLFunc(PChar(lString), 2048));
  ShowMessage(lString);
End;


  // DLL
Function DeineDLLFunc(ABuffer: PChar; Const ABufferLen: Integer): Integer;
Var
  lStr: String;
Begin
  Result := 0;
 
  lStr := Reg.ReadString('whatever');

  If ( ABufferLen > Length(lStr) ) Then // > weil wegen #0 !
  Begin
    StrPCopy(ABuffer, lStr);
    Result := Length(lStr);
  End;
End;
/EDIT: Super - da tippt man die ganze Zeit und zwischenzeitlich wird das gleiche getippelt... Ich hasse umsonst arbeiten...
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#13

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:11
Hm,

wie soll ich ihn den sonst zurückgeben als per result.

@Luckie: Den Wert habe ich per Hand angelegt. Neuer Schlüssel -> REG-SZ und dann den Pfad eingetragen, aber KEIN abschließendes Leerzeichen. Muss ja auch nicht, oder?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:13
Zitat:
wie soll ich ihn den sonst zurückgeben als per result.
Versuch den Wert mal zwischenzuspeichern bevor du ihn zurückgibst.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:14
Siehe mein Edit. Ist auch die Lösung zur Anmerkung von Muetze1.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#16

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:16
Hm...

Aber bei ALLEN anderen Werten und sonstigen Strings funktioniert es und hat immer funktioniert... Deine Methode mag richtig und professionell sein - das kann ich jetzt nicht beurteilen - aber das sieht mir nach mehr Aufwand aus, als durch eine DLL gespart werden sollte...

ACHSO: Und Muetze1, umsonst war es nicht. Ist auch sehr gut erklärt. Ich denke, ich teste das mal...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:19
Bei deinem Glück solltest du in Erwägung ziehen Lotto zu spielen. Würde sich eventuell lohnen.

Tatsache ist eben, wie schon gesagt wurde, dass es eher verwunderlich ist, dass du überhaupt etwas zurückbekommst. Ob es den Aufwand nun trechtfertigt oder nicht, musst du entscheiden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#18

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:20
Zitat von DJ-SPM:
Aber bei ALLEN anderen Werten und sonstigen Strings funktioniert es und hat immer funktioniert... Deine Methode mag richtig und professionell sein - das kann ich jetzt nicht beurteilen - aber das sieht mir nach mehr Aufwand aus, als durch eine DLL gespart werden sollte...
Dann hast du bei ALLEN anderen Funktionen mit einem PChar als Rückgabewert reines Glück, dass der Stack/Heap soweit nicht verändert wurde. Du programmierst jetzt einfach nur nach Zufall - somit: es mag auf x % Rechnern/Konstellationen klappen und bei 100 - x % Rechner im Gegensatz nicht. Auch ist die Suche nach komischen Variablen immer recht (wahn)witzig, vor allem wenn man schon weiss, wo dran es liegt...

/EDIT: Ok, wieder umsonst. Roter Kasten im Urlaub?
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#19

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:21
Ja das macht es allemahl. Mit dem Lotto kann ich mir auch nochmal überlegen. Können ja, wie der Raab eine Tippgemeinschaft für die 29 Millionen aufmachen!

Ok, ich werde das mit dem Buffer so machen. Ist es auch ok, dass ich einen Buffer von 2048 für meinen String reserviere - oder ist das zu viel?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: PChar schneidet letztes Zeichen ab

  Alt 6. Okt 2006, 16:22
Bau die Funktion so um, dass sie dir sagt, wie viel Speicher sie braucht. Ist, meiner Merinung nach, die sauberste Lösung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 17:41 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