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 maximale Länge von Zeichenkette bei WM_COPYDATA?? (https://www.delphipraxis.net/70911-maximale-laenge-von-zeichenkette-bei-wm_copydata.html)

stz 6. Jun 2006 17:04


maximale Länge von Zeichenkette bei WM_COPYDATA??
 
Hallo zusammen,
ich habe mich an WM_COPYDATA, wie in der Code-Library beschrieben, versucht, bin aber irgendwie gescheitert. Von meinem zu übertragenden Text sind immer nur die ersten 48 Zeichen (wenn ich mich nicht verzählt habe) angekommen. Was mache ich falsch, oder muss das so?

schon mal besten Dank für eure Hilfe

PS: Ich hoffe ich bin an der richtigen Stelle für meine Frage gelandet...

SirThornberry 6. Jun 2006 17:08

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
So weit ich weiß gibt es bei wm_copydata keine Größenbeschränkung (zumindest nicht so eine geringe). Kannst du mal den Source posten wie du die Daten überträgst? Hast du eventuell eine falsche Größe für deine Daten angegeben?

stz 6. Jun 2006 17:17

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
versteh ich nicht :gruebel: also, hier mein source:
Delphi-Quellcode:
procedure TCopyDataForm.FormCreate(Sender: TObject);
var
  aCopyData: TCopyDataStruct;
  p: PChar;
begin
  p := 'ganz'#13#10'langer string';
  with aCopyData do
  begin
    dwData := 0;
    cbData := StrLen(p) + 1;
    lpData := p;
  end;
  SendMessage(StrToInt(Copy(ParamStr(1), 4, Length(ParamStr(1)) - 3)), WM_COPYDATA,
              LongInt(Handle), LongInt(@aCopyData));
end;
macht natürlich keinen sinn so, aber ich habs mal ein wenig gekürzt. normalerweise will ich reagieren, wenn ich mein programm mit /s:handle aufgerufen wurde und an den angegebenen handle was senden, aber wie gesagt, die prüfungen hab ich rausgeschmissen

SirThornberry 6. Jun 2006 17:25

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
arbeitest du in deinem richtigen Programm auch mit "pchar" und weißt dem einen staatichen String zu?
Ich weiß nicht woran es liegt, aber ich hatte bei einer ApiFunktion damit auch schon Probleme wenn ich einen staatichen PChar übergeben hab. Wenn ich den Text dynamich übergeben hab (anhand der Eingabe eines Edits etc.) hat es geklappt. Wie sieht der Source auf der Gegenseite aus? (soweit stimmt beim dem Source eigentlich alles)

stz 6. Jun 2006 17:32

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
Meine Gegenseite (genau genommen nur eine andere Instanz des gleichen Programms):
Delphi-Quellcode:
procedure TCopyDataForm.WMCopyData(var Msg: TWMCopyData);
begin
  Memo1.Lines.Add('nachricht von ' + IntToStr(Msg.From));
  Memo1.Lines.Add(String(Msg.CopyDataStruct.lpData));
end;
und die Wahrheit über das Senden:
Delphi-Quellcode:
p := PChar('SearchInstructions:'#13#10 + SearchInstructions);
wobei ich SearchInstructions vorher aus statischen Strings und einer StringGrid-Zelle zusammensetze
(damit gehts genauso wenig :cry: )

Christian Seehase 6. Jun 2006 17:47

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
Moin stz,

wenn Du am Ziel auch String(....) stehen hast, mache daraus mal PChar(...)
Dann funktioniert es.

stz 6. Jun 2006 18:09

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
jaaaa :-D das wars

super! und wieder habt Ihr einen armen kleinen Coder glücklich gemacht.

PS: Könnt Ihr diesen segensreichen Hinweis vielleicht auch hier ergänzen?
http://www.delphipraxis.net/internal...ect.php?t=2832

Vjay 7. Jun 2006 10:22

Re: maximale Länge von Zeichenkette bei WM_COPYDATA??
 
Noch eine Anmerkung:


Beachtet wenn ihr Daten über Strings (pchars) versendet/tunnelt: Für char-strings bedeutet das #0 Zeichen das Ende der Zeichenkette. In diesem Falle müßt ihr die Länge der Daten unbedingt mit übergeben - wie es Delphi-Strings tun.


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