AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Wie ein array of record von C# dll mit COM an Delphi übergeben?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie ein array of record von C# dll mit COM an Delphi übergeben?

Ein Thema von jus · begonnen am 26. Mai 2023 · letzter Beitrag vom 9. Jul 2023
 
jus

Registriert seit: 22. Jan 2005
343 Beiträge
 
Delphi 2007 Professional
 
#1

Wie ein array of record von C# dll mit COM an Delphi übergeben?

  Alt 26. Mai 2023, 01:16
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?
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 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