none
Von MFC / C++ eine C# DLL aufrufen, implementieren RRS feed

  • Frage

  • Hallo,

    ich suche ein Beispielprojekt in VC2010, C++, MFC unter Einbindung einer C#DLL.

    https://harinadha.wordpress.com/2011/10/17/ximucppapi/

    Hat jemand hierzu einen Tipp.

    Eine ähnliche Anleitung, Beispielprojekt.

    Hintergrund: Bestandsprojekt in VC6++ geschrieben. Komplett
    neu schreiben geht zeitlich nicht. Kosten/Nutzen Effekt.
    Da ich eine Komponente mit wenigen Funktionen benötige ist die Idee es unter
    C# zu machen. Von C++, MFC rufe ich die Funktionen auf.

    Jetzt suche ich so eine Art Kurzanleitung, was genau zu tun ist.

    A) Entwicklung PC, was brauche ich?
    B) Am Zielrechner ohne Entwicklungsumgebung muss die Applikation installiert werden, dass es funktioniert, etc.
        Welche Runtime DLLs etc. muss ich nachinstallieren.

       Was wäre da konkret zu tun? Step by step Anleitung
       Folgende Schnittstelle habe ich

    void Func1();
    void Func2(int value1, double value2, string value3);
    int Func3(Byte value1);
    bool Func4(bool value1);
    string Func5();

    C#.DLL
    ---- beinhaltet die Schnittstelle  -- wird in MFC,C++ eingebunden, aufgerufen.

    Gibt es bei Codeproject, stackoverflow etc. ein prägnantes Beispiel.

    Danke im Voraus.


    ----
    Ich meine
    gelesen zu haben.
     - IntelliSense in VS2008 für CLI gegeben
     - IntelliSense in VS2010 für CLI herausgenommen
     - IntelliSense in VS2012 für CLI wieder implementiert und weiter supported.
    Ist dem so?


    Grüße Sandra

    • Bearbeitet Sandra Maier Samstag, 7. Februar 2015 10:56 Format
    Freitag, 6. Februar 2015 11:30

Antworten

  • 2012 habe ich nie eingesetzt. Bin von 2010 auf 2013 umgestiegen.

    Aber die Suche mit Google ergab sofort als ersten Link:
    https://msdn.microsoft.com/de-de/library/vstudio/hh409293(v=vs.110).aspx

    D.h. also ja für Intellisense.Es geht sicherlich ohne COM.

    Ansonsten:

    Einfach ein Assembly mit C++/CLI erzeugen/benutzen und integrieren wie man lustig ist. Entsprechend kann man dort natürlich dann seinen nativen Code einbauen. Mit den entsprechenden pragmas werden die Code Teile entsprechend markiert, wie man es braucht und wie es Sinn macht. Rein native Source Teile bekommen entsprechende Compiler Optionen, dass CLR eben nicht verwendet werden soll.

    Das Assembly kann genauso verwendet werden wie jedes C# Assembly.

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Dienstag, 10. Februar 2015 08:56
    Moderator
  • Hallo Sandra,

    Wie die zweite Lösung aus dem zweiten Link erklärt, muss die C#-Klasse durch gcnew im C++/CLI-Wrapper instanziiert werden. Im folgenden Link gibt es ein Beispiel:
    Using C# from native C++ with the help of C++/CLI

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Sandra Maier Sonntag, 22. Februar 2015 11:36
    Mittwoch, 18. Februar 2015 10:42
    Administrator

Alle Antworten

  • Hallo,
    Im folgenden Link werden die Möglichkeiten beschrieben:
    Using C# dll in C++ code

    Hier gibt es einige Beispiele:
    Call c# dll or class within c++ project

    Hier eine Anleitung:
    http://support2.microsoft.com/kb/828736

    Dieser Thread wird auch hoffentlich hilfreich sein:
    How to call C# dll from C++

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Samstag, 7. Februar 2015 11:28
    Administrator
  • Hallo Dimitar,

    Danke mal, ich schaue es mir an.

    Weißt Du evtl. noch in VS2010 war die IntelliSense für CLI weg.

    In 2012 soll diese wieder aktiv sein. Kannst Du das bestätigen? D.h. es wird hier weiterentwickelt.

    Das ist doch dann mit COM und sollte für VS2012 auch gehen?

    http://support2.microsoft.com/kb/828736/de

    Müsste das nicht auch ohne COM Komponenten, Aufrufe gehen?

    Viele Grüße Sandra




    Sonntag, 8. Februar 2015 11:48
  • In VS-2013 gibt es IntelliSense für C++/CLI

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Montag, 9. Februar 2015 10:50
    Moderator
  • In VS-2013 gibt es IntelliSense für C++/CLI

    Hallo Martin,

    OK und in 2012?

    2010 geht es nicht.

    Hast Du noch einen Tipp zur Implementierung. Das muss doch ohne COM auch gehen, oder?

    Grüße Sandra

    Montag, 9. Februar 2015 11:49
  • 2012 habe ich nie eingesetzt. Bin von 2010 auf 2013 umgestiegen.

    Aber die Suche mit Google ergab sofort als ersten Link:
    https://msdn.microsoft.com/de-de/library/vstudio/hh409293(v=vs.110).aspx

    D.h. also ja für Intellisense.Es geht sicherlich ohne COM.

    Ansonsten:

    Einfach ein Assembly mit C++/CLI erzeugen/benutzen und integrieren wie man lustig ist. Entsprechend kann man dort natürlich dann seinen nativen Code einbauen. Mit den entsprechenden pragmas werden die Code Teile entsprechend markiert, wie man es braucht und wie es Sinn macht. Rein native Source Teile bekommen entsprechende Compiler Optionen, dass CLR eben nicht verwendet werden soll.

    Das Assembly kann genauso verwendet werden wie jedes C# Assembly.

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Dienstag, 10. Februar 2015 08:56
    Moderator
  • Aber die Suche mit Google ergab sofort als ersten Link:
    https://msdn.microsoft.com/de-de/library/vstudio/hh409293(v=vs.110).aspx

    D.h. also ja für Intellisense.Es geht sicherlich ohne COM.

    Hallo Martin,

    Danke. Sicher ist das die Antwort, wie Dimitar vorschlägt.

    Und sicher am besten ohne COM, die Meldung "Der Server ist ausgelastet" möchte ich für die Schnittstelle nicht erhalten.

    Habt Ihr evtl. ein konkretes anschauliches Beispiel, das wäre dann die Antwort. Vielen Dank für Eure Hilfe im Voraus. 

    void Func1();
    void Func2(int value1, double value2, string value3);
    int Func3(Byte value1);
    bool Func4(bool value1);
    string Func5();

    Viele Grüße Sandra


    • Bearbeitet Sandra Maier Sonntag, 15. Februar 2015 11:59 Formatierung
    Sonntag, 15. Februar 2015 11:58
  • Hallo Sandra,

    Wie die zweite Lösung aus dem zweiten Link erklärt, muss die C#-Klasse durch gcnew im C++/CLI-Wrapper instanziiert werden. Im folgenden Link gibt es ein Beispiel:
    Using C# from native C++ with the help of C++/CLI

    Gruß,
    Dimitar


    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    • Als Antwort markiert Sandra Maier Sonntag, 22. Februar 2015 11:36
    Mittwoch, 18. Februar 2015 10:42
    Administrator
  • Wie die zweite Lösung aus dem zweiten Link erklärt, muss die C#-Klasse durch gcnew im C++/CLI-Wrapper instanziiert werden. Im folgenden Link gibt es ein Beispiel:
    Using C# from native C++ with the help of C++/CLI

    Hallo Dimitar,

    ich schau jetzt wie weit ich komme. Bei Problemen melde ich mich nochmals.

    Viele Grüße Sandra

    Sonntag, 22. Februar 2015 11:36