Frage

Ich habe vor kurzem gerungen mit einem Algorithmus , die schlecht umgesetzt wurde (dh der Entwickler wurde auf ein anderes Projekt abgezogen und nicht angemessen dokumentieren, was er) in C # getan hat.

Ich habe eine Alternative (von numerischen Rezepte) gefunden, die funktioniert, aber ist in C ++ geschrieben. Also ich denke, wahrscheinlich die sicherste Art und Weise etwas zum Laufen zu bringen wäre, die C ++ oben in einer DLL zu wickeln.

Angesichts der Tatsache, dass ich immer noch ein bisschen grün bin, wenn es darum geht, C # und habe nie versucht, eine DLL von Grund auf neu zu machen, hört sich das wie ein vernünftiger Ansatz (und wenn ja, hat jemand versucht, diese / bekam einen Rat) ? Oder soll ich gehen, um das ganze Schwein und versuche und Port die C ++ Routine in C #?

Bearbeiten - Ich bin nicht auf der Suche nach jemandem die Entscheidung für mich zu machen, aber wenn jemand eine exprience von jedem Weg hat würde ich interessiert sein, ihre Meinungen und keine bösen Fallen zu hören, das sollte Gemieden werden. Zum Beispiel, wie böse ist in den Listen von Daten von C # zu einem C ++ STL Vektor vorbei?

War es hilfreich?

Lösung

Ich habe versucht, die Verknüpfung zu c-DLL von c # -Code mit recht guten Ergebnissen, obwohl ich einige Probleme beim Senden von Daten zwischen den Umgebungen hatte. Ansonsten ist das Verfahren recht einfach. Je mehr Daten senden Sie hin und her (beide Menge und Häufigkeit), desto langsamer wird Ihr Programm laufen, aber Sie haben wahrscheinlich schon diese auf eigene Faust herausgefunden.

Der größte Nachteil war die Aufrechterhaltung des c # -c Glue-Code (Interface-Code) jedes Mal etwas geändert oder jemand einen Fehler gefunden.

Hier ist ein Stück Code, um Ihnen den Einstieg:

using System.Runtime.InteropServices;
    class myDllCaller {

       //call to function in the dll returning an int
      [DllImport("MyFavorite.dll")]
      private static extern int dllFunction(//list of parameters to function);

    public static void Main() {
    int rerult = dllFunction();

    }
}

Andere Tipps

Wenn die C # -Version Mitch Referenzen für Ihre Zwecke nicht einer geeigneten Lizenz ist, könnten Sie eine verwaltete C ++ Wrapper, wiederverwenden, dass könnte, und wickeln Sie den C Code, den Sie haben, aber immer noch auf Ihre verwalteten Anwendungen als sichtbar sein nativen .NET-Assembly. Ich habe mit dem C-API von einer Bibliothek, diesen Ansatz in der Vergangenheit verwendet, die nicht ihren eigenen nativen .NET-API haben, und fand es relativ schmerzlos Rangier-Daten zwischen den beide.

... Oder Sie könnten den bereits implementierten Code in C # Download von hier .

Es hängt davon ab, was Ihre Ziele sind.

Wenn es eine funktionierende Anwendung haben, würde ich die Kosten und Vorteile beider Ansätze genau abzuwägen und gehen mit den meisten kostengünstig.

Wenn es Ihre C # verbessern dann mit allen Mitteln die C neu zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top