dll in c# geschrieben, probleme beim ausführen

Nein. Hab ich doch schon mehrfach geschrieben:

C/C++-Programme und DLLs kompilieren ins "echte" Exe/DLL-Format
C# und alle anderen .NET-Sprachen machen zwar auch Exe/Dll-Dateien, die aber außer der Dateierweiterung nicht viel mit den anderen gemeinsam haben und nicht damit kompatibel sind.

C-DLLs können in C# nicht verwendet werden und umgekehrt.
Schon zB deswegen nicht, weil in C# alles aus Klassen besteht und eine C-DLL nur Einzelfunktionen exportiert.
Sowas gibts in C# nicht einmal. Klassen gibts zwar in C++, aber nicht in C, wo DLLs ja auch verwendbar sein sollten.
Oder was soll denn ein int sein? Wirklich nur 4 Byte oder eine Struktur, die von Object erbt und noch ein paar Methoden(auch statische) mitbringt? Und was ist Object in C?
...

Wie gesagt: Eine C++CLI-DLL ist die einzige sinnvolle) Möglichkeit.
C++CLI ist eine von mS entwickelte C++-Abart (so wie C# ja auch mit Java Gemeinsamkeiten hat...), in der aber das .NET-Framework verwendet wird.
Allerdings hat C++CLI unter den .NET-Sprachen eine Sonderstellung:
Man kann auch "echten" C/C++-Code in die gleiche Quelltextdatei dazumischen.
Der wird dann wie normales C++ mitkompiliert.

Deswegen kann man sogenannte Wrapper erstellen: Eine C++CLI-DLL kann die Funktionalität von .NET-Klassen als Echt-C-Funktionen anbieten (und umgekehrt).
Man muss nur überlegen, wie man die Klasse am besten in Einzelfunktionen aufteilt.

zB ein init, das in der DLL ein neues .NET-Objekt anlegt,
andere Funktionen, die von dem Methoden aufrufen...

Gruß
 
  • Gefällt mir
Reaktionen: FJK
Hi.

C-DLLs können in C# nicht verwendet werden und umgekehrt.
Das ist nicht ganz richtig. C-DLLs kann man relativ problemlos in .NET über P/Invoke einbinden.

Wenn man wirklich eine Bibliothek für unmanaged und managed schreiben will, ist C++/CLI die erste Wahl. Man kann eine mixed-mode Assembly erstellen, die aus beiden System genutzt werden kann. (Stichwort: IJW)

Eine weitere Möglichkeit wäre jeweils eine C++ Bibliothek für .NET und eine als native Bibliothek aus den gleichen Quellen zu erzeugen (mit #ifdef).

Für den umgekehrten Weg von native zu .NET gibt es COM Interop.

Siehe z.B. http://msdn.microsoft.com/en-us/library/ms973872.aspx

Gruß
 

Neue Beiträge

Zurück