AGB  ·  Datenschutz  ·  Impressum  







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

StringListe austricksen

Ein Thema von Int3rrupt · begonnen am 7. Aug 2004 · letzter Beitrag vom 9. Aug 2004
Antwort Antwort
Int3rrupt

Registriert seit: 30. Mär 2004
9 Beiträge
 
#1

StringListe austricksen

  Alt 7. Aug 2004, 17:00
Hallo,

ich habe da ein Problem mit der Übergabe meiner Liste an das Objekt TStringList. In der Hauptanwendung wird ein Modul(.DLL) aufgerufen. An die DLL übergebe ich folgende Liste über PChar:

Code:
  p := StrAlloc(2048);             // p ist vom Typ PChar
  s1 := TStringList.Create;

  s1.Add('Melanie Mustermann');
  s1.Add(#0 + '123' + #0 + '4567');
  s1.Add('Das ist ein Test');
  s1.Add(#0 + '123' + #0 + '4567');
  s1.Add('123');
 
  // die Länge der Liste
  Len := Length(s1.CommaText);      // Len ist vom Typ integer

  // hier werden alle Zeichen einzeln, wegen #0 an p übergeben
  for i := 1 to Len do
    p[i] := s1.CommaText[i];
   
  DLLAufruf(p, Len);
In der DLL werden die Werte und die Länge richtig übergeben. Wenn ich aber meine übergebene Liste an eine StringListe übergebe, habe ich nur den ersten Eintrag "Melanie Mustermann" und der Rest wird nicht in die Liste reingeschrieben wegen dem Zeichen #0.

Code:
procedure MachWas(Liste: PChar; Len: integer);
var
  s: string;
  i: integer;
begin
  SetLength(s, Len);
  for i := 1 to Len do
    s[i] := p[i];

  s2.CommaText := s; // nach der Übergabe ist die Liste nicht komplett, s hat allerdings den richtigen Inhalt
Habe dann in die Delphi Unit Classes nachgeguckt und tatsächlich filtert die Funktion intern alle Einträge bis Zeichen #0. Die nachfolgende Zeichen werden nicht übergeben.
Ist das jetzt ein BUG bei Delphi oder mache ich irgendwo einen Fehler. Den ein String funktioniert meiner Meinung anders als ein nullterminiertes PChar. Ein Strigng kann auch chars mit dem Ascii Zeichen #0 annehmen.

Kann man das Objekt irgendwie austricksen ohne in die Classes Unit zu verändern?

P.S. arbeite mit Delphi 7 Pro.

Bin für jede Antwort dankbar.

Gruß
It's not a bug, it's a feature!
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: StringListe austricksen

  Alt 8. Aug 2004, 05:57
Und wenn Du vor dem Aufruf von Commatext die #0 durch ein Sonderzeichen ersetzt und hinterher wieder zurück ?
  Mit Zitat antworten Zitat
Int3rrupt

Registriert seit: 30. Mär 2004
9 Beiträge
 
#3

Re: StringListe austricksen

  Alt 8. Aug 2004, 09:52
Danke für deine Antwort,

an die Idee habe ich noch nicht gedacht, werde glaube ich auch nicht drumherum kommen, die Zeichen davor zu ersetzen. Muss mir nur noch ein Sonderzeichen ausdenken, den es kommen alle ASCII Zeichen 0..255 vor. Am besten probiere ich das Zeichen #0 durch zwei oder besser drei andere Zeichen zu ersetzen, denn die Wahrscheinlichkeit das zwei oder besser drei gleiche Zeichen hintereinander vorkommen ist gering.


Danke und Gruß
It's not a bug, it's a feature!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: StringListe austricksen

  Alt 8. Aug 2004, 10:05
Oder du ersetzt alle zeichen so das nur noch 128 werte genutzt werden. Also einfach aus einem zeichen 2 machen, eventuell sogar so einfach das die summe beider zeichen das richtige zeichen ergibt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

Re: StringListe austricksen

  Alt 9. Aug 2004, 09:02
Zitat von SirThornberry:
Oder du ersetzt alle zeichen so das nur noch 128 werte genutzt werden. Also einfach aus einem zeichen 2 machen, eventuell sogar so einfach das die summe beider zeichen das richtige zeichen ergibt.
Er muß aber trotzdem #0 durch was Anderes ersetzen, weil nur #0 + #0 = #0
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 17:44 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