![]() |
DLL mit arry Übergabe
Hallo
ich versuche mich gerade mit DLL Erstellung, komme aber nicht so Richtig weiter. Ich möchte ein Array in der DLL befüllen lassen und dann in meiner Anwendung weiter verarbeiten. Die DLL soll eine .Net DLL werden, ich möchte die DLL Funktionen von einem Win32 Programm und einer .Net Anwendung aufrufen können. Ich habe da so meine Probleme mit dem setzten von Pointern, es wäre Nett wenn Ihr mir ein bisschen helfen könntet. So stelle ich mit die DLL vor DLL Programm
Delphi-Quellcode:
So stelle ich mit die Hostanwendung vor
library dll_projekt1;
uses SysUtils, Classes; type PTRec = ^TREc; TRec = record name : String; vorname : String; end; var adresse : array [0..99] of TREC; {$R *.RES} procedure test(i:integer; var ???? TREC oder adresse ); // was muss ich hier einsetzen ?? begin if i > 0 then begin adresse[0].nachname := '10'; adresse[1].vorname := '20'; end; end; exports test; begin end. Hostanwendung
Delphi-Quellcode:
mit einfachen Variablen hat das schonmal funktioniert aber ich hätte gerne ein Arrayunit Hostanwendung; {$unsafecode on} interface uses System.Drawing, .......; type PTRec = ^TREc; TRec = record nachname : String; vorname : String; end; adresse = array [1..99] of TREC; . . . . implementation procedure test(i:integer; ??const ff: PTREC ); stdcall; external 'dll_projekt1.dll'; unsafe; // wie muss die Procedure deklariert werden . . . procedure TWinForm.Button1_Click(sender: ...) unsafe; begin // wie muss der Auruf jetzt sein test(???? 1,PTREC); textbox1.Text := adresse[1].nachname; textbox2.Text := adresse[1].vorname; end; danke schonmal für die Nette HILFE Gregor |
Re: DLL mit arry Übergabe
hallo,
als erstes musst du im hauptprogramm natürlich die gleiche arraygröße haben...
Delphi-Quellcode:
dann kannst du nicht einfach im haputprogramm const, statt var schreiben, wenn du var in der dll definiert hast:
var
adresse : array [0..99] of TREC; ... var adresse = array [1..99] of TREC;
Delphi-Quellcode:
und den aufruf machst du so, wie du die prozedur definiert hast:
...
procedure test(i:integer; var ???? TREC oder adresse ); .. procedure test(i:integer; ??const ff: PTREC ); stdcall; ...
Delphi-Quellcode:
außerdem verstehe ich nicht, warum du in der dll-prozedur erst im array 0 was einträgst und dann im array 1 - ist das nur zur demo :?: :oops: :?:
...
var testarr: TREC; begin test(1, ^testarr); ... end; evtl. solltest du noch genauer erklären, was du machen willst, denn du kannst z.b. statt dem übergeben des pointers auch einfach eine funktion mit result definieren.. mfg, heiopei ps: was macht der "parameter" unsafe? |
Re: DLL mit arry Übergabe
.NET-Dlls haben einen komplett anderen Aufbau als Win32-Dlls, du kannst von einem Win32-Programm keine Funktionen einer .NET-Dll aufrufen (vice versa geht es per P/Invoke).
|
Re: DLL mit arry Übergabe
Danke schonmal für die schnelle Antwort
Zitat:
DLL
Delphi-Quellcode:
in der Hostanwendung
..
procedure test(i:integer; var ???? TREC oder adresse ); begin ..
Delphi-Quellcode:
procedure test(i:integer; ??const ff: PTREC ); stdcall; external 'dll_projekt1.dll'; unsafe;
// wie muss die Procedure deklariert werden . . . procedure TWinForm.Button1_Click(sender: ...) unsafe; begin // wie muss der Auruf jetzt sein test(???? 1,PTREC); textbox1.Text := adresse[1].nachname; textbox2.Text := adresse[1].vorname; Zitat:
Zitat:
Zitat:
Gregor |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 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-2025 by Thomas Breitkreuz