Hallo,
ich bin am verzeifeln. Ich möchte in Delphi eine Methode von einer C#
DLL aufrufen und einen array of record in Delphi bekommen. Das Record könnte so aussehen:
Delphi-Quellcode:
RMEDIA = packed record
Name: String;
ID: Integer;
end;
Dazu Ich habe einfach in Visual Studio 2019 eine "Class Library (.NET Framework)" Project erstellt und eine
DLL mit einer einzigen Methode erstellt. Diese
DLL lade ich einfach in Komponenten importieren->Typenbibliothek rein und erhalte eine TLB
Unit in Delphi. Wenn die Funktionsparameter nur aus String oder Integer bestehen funktioniert es auch wunderbar. Doch wie kann ich von C# aus array of struct/record als Parameter übergeben?
Auf C# Seite habe ich mal folgendes versucht:
Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace DelphiTest
{
public class CrossDLL
{
public struct RMEDIA
{
public String Name;
public int ID;
}
public string HelloWorldArray(out RMEDIA[] structArray, ref int arraySize)
{
arraySize = 2;
// Create an array of MyStruct
structArray = new RMEDIA[arraySize];
// Populate the array with data
for (int i = 0; i < arraySize; i++)
{
structArray[i].ID = i + 1;
structArray[i].Name = "Hallo";
}
return $"";
}
}
}
Wenn ich diese erstellte
DLL in Delphi über die Komponente installieren->Typenbibliothek importierenreinlade erhalte folgende Methode:
function HelloWorldArray(out structArray: PSafeArray; var arraySize: Integer): WideString;
Wenn ich folgendes versuche:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
CrossDLL: TCrossDLL;
Items: PSafeArray;
arraySize: Integer;
begin
CrossDLL :=TCrossDLL.Create(self);
CrossDLL.HelloWorldArray(Items, arraySize);
end;
bekomme ich gleich folgende eine Fehlermeldung:
Code:
---------------------------
Project1
---------------------------
Altes Format oder ungültige Typbibliothek. (Ausnahme von HRESULT: 0x80028019 (TYPE_E_UNSUPFORMAT))
---------------------------
OK
---------------------------
Hat jemand einen Ansatz für mich?