Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Integer Array in Dll (https://www.delphipraxis.net/69174-integer-array-dll.html)

TheSaint 11. Mai 2006 09:27


Integer Array in Dll
 
Hallo!
Ich habe einen Dll, die als Ausgabeparameter ein Array of integer hat.
Delphi-Quellcode:
type
   TIntArray= array of integer;

procedure Test(var Ausgabe: TIntArray); stdcall;
begin
SetLength(Ausgabe, 2);
Ausgabe[0] := 1;
Ausgabe[1] := 2;
end;
Die Dll möchte ich gerne als unmanaged Code in mein .NET Projekt einbinden.
Wie muss der Prototype in c# aussehen, damit die Dll richtig angesprochen wird.
Bisher habe ich es so probiert, funktioniert aber nicht:
Code:
[DllImport(@"test.dll", CallingConvention = CallingConvention.StdCall)]
private static extern void Test(ref int[] Ausgabe);

private void Btn_Click(object sender, EventArgs e)
{
int[] Ausgabe= null;
Test(ref Ausgabe);
}
Kann mir da jemand helfen
Danke
Thesaint

Olli 10. Sep 2006 12:04

Re: Integer Array in Dll
 
Erstmal mußt du die Länge des Arrays immer mit übergeben. Dynamische Arrays wie sie in Delphi realisiert werden haben natürlich nichts mit C-Arrays zu tun oder gar mit der MFC-Klasse CArray o.ä.

Ein Array ist ansonsten nur ein Pointer auf den Typ der Elemente des Arrays. Man kann also auch schreiben:

Delphi-Quellcode:
type
   PInteger = ^Integer;

procedure Test(var Ausgabe: PInteger; var ArrLength: Integer); stdcall;
begin
...
end;
Cleverer wäre natürlich eine Struktur zu deklarieren, die portabel ist, Bsp:

Delphi-Quellcode:
type
   PInteger = ^Integer;
   IntArray = record
     Length: LongWord;
     Array: PInteger;
   end;
... wobei die DLL natürlich auch gleich die Funktionen zum Allozieren und De/Reallozieren mit exportieren muß, weil du nicht einfach die Memory Manager von C# und Delphi mischen kannst.


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