Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pointer auf Record an DLL - so richtig? (https://www.delphipraxis.net/130110-pointer-auf-record-dll-so-richtig.html)

Björn Ole 3. Mär 2009 17:10


Pointer auf Record an DLL - so richtig?
 
Hallo DP-Gemeinde.

Ich bin auf dem Gebiet noch etwas unsicher, darum wollte ich mal nachfragen, ob das, was ich hier gerade fabriziert habe, einigermaßen hinhaut.
Also funktionieren tut es, nur ob es auch gesund ist...

Code sagt ja bekanntlich mehr als 1000 Worte, darum leg ich einfach mal los:


Delphi-Quellcode:
// gemeinsame Unit
TMyRecord = packed record
  str: string;
  int: integer;
end;
PMyRecord = ^TMyRecord;


//Hauptform
procedure Modify(p_r: PMyRecord); stdcall; external 'my.dll';

{...}

procedure BtnClick;
var
  r: TMyRecord;
begin
  r.str:='hallo';
  r.int:=3;
  Modify(@r);
  showmessage(r.str+' '+IntToStr(r.int));
end;


//DLL
procedure Modify(p_r: PMyRecord); stdcall;
begin
  p_r.str:='huhu';
  p_r.int:=5;
end;
In der DLL soll der Inhalt verändert werden und danach im Formular weiterbenutzt werden können.
Ist das so in Ordnung? Oder kompletter Murx? Wär nett, wenn mir jemand ein paar Tipps geben könnte. :stupid:

Danke,
Björn.

SirThornberry 3. Mär 2009 17:13

Re: Pointer auf Record an DLL - so richtig?
 
Wenn die DLL auch von nicht Delphiprogrammen genutzt werden soll musst du aus deinem Record den Typ String verbannen. Wird die DLL nur von Delphianwendungen verwendet musst du bei Verwendung von Strings bedenken das die ShareMem benötigt wird. Zudem ist dann stdcall nicht notwendig (wird ja eigentlich nur verwendet damit auch Programme auf die Funktion zugreifen können welche die Delphiaufrufkonvention nicht beherschen)

Björn Ole 3. Mär 2009 17:23

Re: Pointer auf Record an DLL - so richtig?
 
Zitat:

Zitat von SirThornberry
Wenn die DLL auch von nicht Delphiprogrammen genutzt werden soll musst du aus deinem Record den Typ String verbannen.

Ich habe vor, alles so "offen" wie möglich zu halten.
Würde WideString anstatt String in dem record das Problem lösen?

Apollonius 3. Mär 2009 19:00

Re: Pointer auf Record an DLL - so richtig?
 
Ja. Widestrings werden von COM verwaltet und diese Schnittstelle kann aus praktisch allen Sprachen angesprochen werden (in C/C++ heißt der Typ BSTR).

Björn Ole 3. Mär 2009 19:07

Re: Pointer auf Record an DLL - so richtig?
 
Super. Vielen Dank für die schnellen Antworten.

Frohes Programmieren!

Björn


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz