Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Arbeiten mit Pipes (https://www.delphipraxis.net/138438-arbeiten-mit-pipes.html)

Digielm 10. Aug 2009 13:37


Arbeiten mit Pipes
 
Hallo Leute,

ich hab da ein riesen Problem diese Funktion klappte unter Delphi 2006 ohne Probleme:
Delphi-Quellcode:
procedure SendPipeMessage(lpvMessage: PChar);
var
  fSuccess: BOOL;
  cbWritten: DWord;

begin
  try
    fSuccess:=
      WriteFile(hPipe, lpvMessage^, strlen(lpvMessage) + 1, cbwritten, nil);
    if not fSuccess then
    begin
      InitPipe;
    end;
    except
    end;
end;
Nach der Umstallung auf Delphi 2009 bekomme ich den Message mit div \0 .. zurück also keinen richtigen Stringmehr.
Ich meine zu wissen das sich in der Variablenthematik bezüglich unicode was getan hat nur momentan stehe ich leider völlig auf dem schlauch.

Also die pipe Message ist z.B. 'DAIL 123456789' dann bekomme ich jetzt "D\0I\0A\0L\0 \01\02\0" zurück
die \0 sind definitiv zu viel in dem String.

Ich hoffe es kann mir jemand helfen.

Klaus01 10. Aug 2009 13:46

Re: Arbeiten mit Pipes
 
Hallo Digielm,

wie schaut es denn aus wenn Du den Prozedurkopf so änderst?

Delphi-Quellcode:
procedure SendPipeMessage(lpvMessage: PAnsiChar);
Grüße
Klaus

Digielm 10. Aug 2009 14:47

Re: Arbeiten mit Pipes
 
OK danke für den Tip

Bin ja auch saudoof hätte ich eigentlich selber drauf kommen müssen.

Danke nochmals

himitsu 10. Aug 2009 15:08

Re: Arbeiten mit Pipes
 
dann aber natürlich auch strlenA verwenden

Digielm 10. Aug 2009 15:13

Re: Arbeiten mit Pipes
 
ALso strlenA kennt mein Delphi nicht

und wenn ich
Delphi-Quellcode:
SendPipeMessage(pansichar(String));
schicke kommt immer nur das 1. Zeichen mit

bzw so
Delphi-Quellcode:

message := Pansichar('123456');
klappt nur wenn ich das no mache gehts nicht
Delphi-Quellcode:
var
uebergabestring : String;

message := Pansichar(uebergabestring);

alzaimar 10. Aug 2009 16:47

Re: Arbeiten mit Pipes
 
Strings sind ab D2009 per Voreinstellung als Unicode definiert. Du stülpst nun einem Unicode-String ein PChar über, was schon mal uncool ist. Denn Der PChar sieht nun das Unicode-Zeichen '1', was intern als 31 00 dargestellt wird. Nun ist 00 das String-Ende und -wupps- hast Du dein einzelnes Zeichen.

Schreib einfach die SendPipeMessage um, sodaß Du dort (Unicode- oder Ansi-)Strings übergibst. In der Routine selbst nimmst Du die notwendigen Konvertierungen vor, um der WinAPI-Funktion die richtigen Parameter zu übergeben.

axellang 11. Aug 2009 08:59

Re: Arbeiten mit Pipes
 
Versuche es mal mit

Delphi-Quellcode:
PAnsiChar(AnsiString(unicode_string))


Axel


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