Zitat:
außerdem fehlt auch noch der Zugriff auf Seite der EXE, welchen du uns vorenthältst.
Ne, das ist einfach nur eine Nachricht über Winsock, die halt so wie das Record aussieht, zuerst ein Word, dann ein Nullterminierter String.
Ich möchte diesen String halt als Delphi-String haben. Die Adresse ist [Winsock-buf-ptr] + OffsetOf(Record-buf), deswegen -- bar := Pfoo(buf); lol := String(PChar(@bar.buf)); --
Und weil das mit den Strings nicht funktionierte, habe ich das jetzt mit PChars gemacht.
Und ein PChar zeigt bei 'hello 3' auf das '3' -- MessageBox(0,numberptr,0,0); -- funktioniert also.
Bei -- MessageBox(0,PChar(StrToInt(String(numberptr))),0, 0); -- stürzt das Programm allerdings ab..
Ich versuche gerade den Fehler in einer Standalone-
Dll zu bekommen (also ohne den Client und die Winsock-Nachrichten):
Delphi-Quellcode:
procedure test(buf: PChar);
var
bar: Pfoo;
lol: string;
begin
bar := Pfoo(buf);
lol := String(PChar(@bar.buf));
lol := Parse(':', lol, 2);
if Parse(' ', lol, 1) = 'hello' then
MessageBox(0,'','',0);
MessageBox(0,PChar(lol), PChar(Parse(' ', lol, 1)),0);
end;
procedure main(reason: dword);
var
x: Pointer;
a: Pfoo;
l:integer;
begin
case reason of
1234:
begin
l:=Length('');
GetMem(x, 8);
a := x;
a.other := 2;
Move('hello', a.buf, 6);
test(PChar(x));
end;
end;
end;
begin
DLLProc := @main;
main(1234);
end.
Und da ist jetzt das Problem, dass bei -- lol := Parse(':', lol, 2); -- kein leerer String, sondern 0 zurückgegeben wird.
Deswegen kommt bei -- if S[Length(S)] <> Char then -- (aus der Parse-Funktion), aufgerufen durch -- if Parse(' ', lol, 1) = 'hello' then --, ein Fehler, da S = 0/nil ist.
Aber das ist glaub ich wieder ein anderer Fehler.....
Ist auch egal, ich beschreibe das alles viel zu schlecht, muss ich halt gucken, was ich mache
Danke für eure Hilfe!