Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Probleme mit Records in DLL's (https://www.delphipraxis.net/153346-probleme-mit-records-dlls.html)

delphis spassbremse 29. Jul 2010 19:06

Probleme mit Records in DLL's
 
Hallo Leute,

ich bin mal wieder dabei was in Delphi zu machen und bin etwas aus der Übung...

Ich versuche mit Dynamisch eingebundenen DLL's per Records zu kommunizieren.

Hier ein bisl Code:


Die DLL:
Delphi-Quellcode:
library tbDemo;

{...}

type TIRCMessage = record
  channel: PChar;
  username: PChar;
  content: PChar;
  accesslevel: integer;
  msgtype: integer;
end;

{...}

function hallo(msg: TIRCMessage): Pointer;
var
  res: TIRCMessage;
begin
  if msg.msgtype = 0 then
  begin
    res.channel := msg.channel;
    res.msgtype := 0;
    res.content := pchar('Hallo, '+msg.username);
  end;
  result := @res;
end;

{...}
Und nun der Teil der Anwendung

Delphi-Quellcode:
type TIRCMessage = record
  channel: PChar;
  username: PChar;
  content: PChar;
  accesslevel: integer;
  msgtype: integer;
end;

{...}

type dllModuleExecute = function(msg: Pointer): Pointer;


implementation

{...}

function TBotModule.execute(msg: TIRCMessage; remoteFunc: string): TIRCMessage;
var
  func: dllModuleExecute;
  msgBuffer: ^TIRCMessage;
begin
  result := emptyIRCMessage();
  func := GetProcAddress(dllHandle, pchar(remoteFunc));
  msgBuffer := func(@msg);
  showmessage(msgbuffer.content);
  result := msgBuffer^;
end;
Der zu sendene Record kommt vollständig und ohne Probleme an.
Der Code in der DLL modifiziert das ganze Ordentlich und wird beim showmessage richtig ausgegeben.

Wie man sieht, soll das Ergebnis der DLL funktion zurückgegeben werden.
Wenn ich jetzt aber ausserhalb der Funktion mit dem Ergebnis arbeiten möchte, bekomm ich immer einen Zugriffsverletzung.

Ich denke mal, ich muss irgendwie den Record auf dem Speicher kopieren?

Habt ihr ne Idee?

mkinzler 29. Jul 2010 19:14

AW: Probleme mit Records in DLL's
 
Pchar sind ja nur Zeiger auf die wirklichen Inhalte

delphis spassbremse 29. Jul 2010 19:22

AW: Probleme mit Records in DLL's
 
Oh das ist mir entflohen :)

Wie löse ich das am Besten?

mkinzler 29. Jul 2010 19:25

AW: Probleme mit Records in DLL's
 
Char-Arrays oder WideStrings

delphis spassbremse 29. Jul 2010 19:47

AW: Probleme mit Records in DLL's
 
Ich ralls gerade echt nicht :(

Ne Codehilfe wär ganz nett...


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