vc6 <-> c#(net2.0) interaktion



  • Hallo Zusammen.

    Wir haben ein umfangreiches Softwareprojekt in VC6 und müssen dieses nun mit einem neuen Projekt auf Basis von C# bzw. NET 2.0 interagieren lassen.

    Auf Grund von vielen Eigenheiten des VC6 Codes konnten wir das Projekt bisher nicht nach VS2005 konvertieren.

    Meine Frage an Euch ist, ob jemand schon erfolgreich eine bi-direktionale Kommunikation zwischen VC6 C++ und C# eingerichtet hat. Bisher waren unsere Versuche dahingehend nicht besonders erfolgreich. Besonders Events die C++ in C# anstossen soll, werden nicht getriggert. In umgekehrter Richtung kommt je nach Typ nichts oder nur teilweise Daten an.

    Jede Hilfe ist sehr willkommen. Vielleicht gibt es hierzu ja irgendwo ein gutes Tutorial oder Beispielprojekte, die wir analysieren können...

    Vielen Dank und schöne Grüße, 👍
    Elmar



  • Wie gesagt 😉

    Was ist denn das VC6 Projekt für ein "Ding"?
    Eine EXE? Dann musst Du "Interprocess-Process-Kommunikation" verwenden

    Eine DLL/LIB/COM oder sonstwas!? Dann kannst Du es vermutlcih "einfach" mit C++/CLI machen.



  • Es ist eine EXE. Gibt es dazu ein Tutorial oder ähnliches verwertbares?
    Ich komme leider aus der C#/Java Ecke und bin C++ Nullraffer. Sorry, wenn die Lösung für Euch offensichtlich ist 😕.

    Schöne Grüße!



  • Die "einfachste" Lösung wäre, wenn Du aus Deiner VC6 Applikation ein Out-Of-Process-COM-Server machen würdest. Dann kannst Du "direkt" aus C# Methoden in der EXE aufrufen.



  • Oder eine C# class library als Com exposeable?
    Wie erwähnt macht mir der C++ Teil zu schaffen.

    Ich habe eine kleine Test Library als "Register for Com Interop" compiled:

    ------
    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace vc6interop
    {
    public class Interop
    {
    public static string GreetMe(string name)
    {
    return "Hallo " + name;
    }
    }
    }
    ------

    Wie komme ich an die Methode in VC6 wieder ran? Das Verzeichnis mit der DLL habe ich dem Projekt unter den Projektpfaden von VC6 bekannt gemacht. Mit meinen peinlichen C++ Kenntnissen habe ich auch ein Beispiel angepasst aber leider findet der Compiler das gar nicht gut:

    ------
    GreetMe function;
    CString result;

    HINSTANCE hinstLib = LoadLibrary("vc6interop.dll");

    if (hinstLib) {

    function = (GreetMe) GetProcAddress(hinstLib, "GreetMe");

    if (function)
    result = (function) ("John");

    BOOL fFreeResult = FreeLibrary(hinstLib);
    }

    // Das Ergebnis anzeigen
    if (!hinstLib || !function)
    printf("Error\n");
    else
    printf("Result: %s\n", result);
    ------

    Kannst Du mir einen Tipp geben, wie ich eine Methode in einer Dokumentenklasse o.ä. definieren kann, die diese DLL lädt befüllt und das Ergebnis einfach nur zurückliefert?

    Beste Grüße,
    Elmar



  • Du willst einen C#-Server machen!?
    http://msdn2.microsoft.com/en-us/library/aa645738(VS.71).aspx

    Auf der Client-Seite (VC6) musst Du dann dieses natürlich via COM! ansprechend und nit mit LoadLibrary! (Co... Funktionen)


Anmelden zum Antworten