Tipps für die Verwendung einer C-Bibliothek von C#

Ich habe eine library in C, die ich verwenden möchte von C#.

Von dem, was ich zusammengetragen aus dem internet, eine Idee ist, wickeln Sie es in eine C++ - dll, und DllImport dass.

Das problem ist, dass die Funktion, die ich anrufen möchte hat eine ziemlich versaute parameter eingestellt: unter anderem eine Referenz auf eine Funktion (die ein .NET-Funktion), und ein paar von arrays (einige schreiben, einige Lesen).

int lmdif(int (*fcn)(int, int, double*, double*, int*), 
          int m, int n, double* x, double ftol, double xtol, double gtol, 
          int maxfev, double epsfcn, double factor)

Gegebenen und einer Schnittstelle wie dieser, was sind die Gemeinheiten sollte ich Ausschau halten? (Und Lösungen zu, bitte)

Warum nicht Sie...

- Rewrite in C#? Ich begann, aber es ist schon maschinell übersetzt aus FORTRAN, und ich weiß nicht, wie viel coding-Sachen, die ich nicht verstehen kann.

- Verwenden eine vorhandene .NET-Bibliothek? Ich versuche es jetzt, aber die Ergebnisse sind nicht genau das gleiche

- Kompilieren in C++? Ich denke über es, aber es sieht aus wie eine Menge von Schmerzen

  • Angriff === verwenden?
  • Interessante Frage übrigens! Es gibt viele Möglichkeiten, um eine Schnittstelle mit C-Bibliotheken. An deiner Stelle würde ich vielleicht gemacht haben, eine Netzwerk-Schnittstelle zwischen einem C-Programm die Bibliothek und Ihre .NET-Programm. Aber es kommt auf die performance-Anforderungen für das Instanz. Ich hatte noch nie gehört, über Reflexion.emittieren, cool zu wissen. @leppie
  • Soweit ich weiß ist die fortran-dlls eine C-Schnittstelle und zugänglich sein sollte, ohne eine Cpp-wrapper. Aber ich bin nicht sicher, ob der Funktionszeiger funktionieren kann.
  • es ist tatsächlich buchstäblich ein .lib war ich unter dem Eindruck, den ich nicht erreichen kann, die direkt von C#.
  • das ist richtig, wenn es eine lib ohne zugehörige dll, die Sie nicht darauf zugreifen können. Aber Sie sind in der Lage zur Bindung der lib in eine dll unter Verwendung einer def-Datei zu exportieren, die erforderlichen Methoden, ohne Ihren Quellcode neu kompilieren.
InformationsquelleAutor Benjol | 2012-06-01
Schreibe einen Kommentar