C# DLLs importieren

chriss_2oo4

Erfahrenes Mitglied
Hi,

ich möchte Funktionen aus einer C-Dll in meiner C# Anwendung verwenden. Das Problem ist, dass ich den Funktionen Strukturen übergeben muss.

Wie ich bereits im Forum gelesen habe kann mann wie folgt Strukturen definieren:

Code:
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
public struct STRUCTFORDLL
{
public uint einfachtIntWert;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] public string string1;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=1024)] public string string2;
}

Mein Problem ist jedoch, dass ich sehr, sehr viele Strukturen benötige und das Strukturen weitere Strukturen beinhalten und ich somit alle benötigten Strukturen nocheinmal neu definieren müsste.

Gibt es eine Möglichkeit beispielsweise den Header der DLL zu importieren o. Ä. um sich den Aufwand zu sparen?


Lg Chriss
 
Hallo chriss_2oo4,

ich fürchte, dass das - je nach Form Deiner Strukturen - nicht so einfach möglich ist.
Zum einen kennt C# die typedef-Anweisung nicht. Falls Du die verwendest, hast Du keine Chance.
Zum anderen werden in C# Zeiger standardmäßig nicht verwendet, während man in C kaum ohne auskommt. In C# bräuchtest Du zusätzlich für jede Struktur das unsafe-Schlüsselwort. Dann kannst Du aber auch gleich die Strukturen neu schreiben... :rolleyes:
Auch können Arrays und Strings in C# keine feste Größe annehmen, ohne sie mit dem fixed-Schlüsselwort zu definieren. Das entspricht demselben Problem wie das mit dem unsafe-Schlüsselwort.

Insgesamt würde ich sagen, dass Du die Strukturen neu definieren musst. Falls ich mich irren sollte, lasse ich mich gerne korrigieren, denn auch ich wäre interessiert an einer Lösung :)

Gruß
PhoenixLoe
 
Hi PhoenixLoe,

erstmal Danke für Deine Antwort!

Ich weiss natürlich nicht ob es so funktioniert -> Ich habs noch nicht zum Laufen gebracht -> sind alles nur Vermutungen :)

Im unteren Code-Beispiel definiere ich doch eine neue Struktur in C#?

Typedefs sind doch eigentlich nur Aliasnamen -> da könnte ich doch einfach den Orginal Typ dafür verwenden?

Für Function Pointers (typedefs) stellt C# delegate zur Verfügung?



Lg Chriss
 

Neue Beiträge

Zurück