Einzelnen Beitrag anzeigen

Blatt

Registriert seit: 8. Sep 2010
17 Beiträge
 
#7

AW: Strings in Delphi in DLL

  Alt 21. Okt 2010, 12:17
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) = 'hellothen
    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!
  Mit Zitat antworten Zitat