Zitat von
Superwinger:
Delphi-Quellcode:
function _SendData(vData, ReceiverTitle:string):boolean;
type
TStringRecord=record
var1:string;
end;
Ja, wenn ich jetzt die Senderfunktion aufrufe und sage, er soll bitte "test" senden, wird nur "|)E" ausgegeben...
klar, weil du hier den Internen Pointer des Strings versendest ... drum auch das
String[255]
und wenn dort immernoch ein Zeichen (also hier das Zeichen #4) vor dem "test" ankommt, dann nimm
Array[1..255] of Char;
(oder probier es mal mit dem String "test56789012345678900123456789001234567890" ... denn vor dem String in String[255] versteckt sich noch ein Längenbyte und das wäre in dem letzen Fall "40 Zeichen", also #40 aka "(" )
[edit] OK, aber wo war die RedBox
ja, per Move bzw. MoveMemory/CopyMemory kopieren
MoveMemory(@CDString.var1, PChar(vData), Length(vData) + 1);
aber paß auf, daß der Text in vData nicht länger als 255 Zeichen ist
oder einfach notfalls abschneiden
MoveMemory(@CDString.var1, PChar(vData), Min(Length(vData), 255) + 1);
und die +1 sind für die abschließende Null
[add2]
oder versuch mal ganz einfach direkt und ohne den Record darum
pCDString := PChar(vData);