![]() |
Integer Array in Dll
Hallo!
Ich habe einen Dll, die als Ausgabeparameter ein Array of integer hat.
Delphi-Quellcode:
Die Dll möchte ich gerne als unmanaged Code in mein .NET Projekt einbinden.
type
TIntArray= array of integer; procedure Test(var Ausgabe: TIntArray); stdcall; begin SetLength(Ausgabe, 2); Ausgabe[0] := 1; Ausgabe[1] := 2; end; Wie muss der Prototype in c# aussehen, damit die Dll richtig angesprochen wird. Bisher habe ich es so probiert, funktioniert aber nicht:
Code:
Kann mir da jemand helfen
[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); } Danke Thesaint |
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:
Cleverer wäre natürlich eine Struktur zu deklarieren, die portabel ist, Bsp:
type
PInteger = ^Integer; procedure Test(var Ausgabe: PInteger; var ArrLength: Integer); stdcall; begin ... end;
Delphi-Quellcode:
... 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.
type
PInteger = ^Integer; IntArray = record Length: LongWord; Array: PInteger; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:52 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