Ich möchte in der Lage sein, eine Klassenschnittstelle zu programmieren, die ich in C# - und VB6-Klassen implementieren kann, so dass diese Klassen in VB6-Code in der gleichen Weise behandelt werden können, aber ich kann das nicht funktionieren.Wie kann ich eine Schnittstelle zwischen VB6 und C# teilen?
In VB6 möchte ich Klasse VB6Class mit dem Schlüsselwort implementiert haben, um eine Schnittstelle ISharedInterface zu implementieren.
In C# möchte ich eine andere Klasse C# Klasse haben, die ich COM als ISharedInterface implementieren kann.
Das Ziel ist es, dass Code VB6 dann in der Lage sein Klasse arbeiten auf VB6Class und C# über ISharedInterface ohne Fürsorge, die Sprache der Unterricht in gebaut wurden.
ich diese Technik als eine Möglichkeit nutzen wollen weg zu migrieren von VB6 durch sukzessives Neuschreiben alles am VB6-Ende und wenn ich Schnittstellen implementieren kann, die ich bereits in VB6 innerhalb von C# habe, wäre dies ideal. Aber selbst wenn ich eine Schnittstelle in C# neu schreiben müsste, um sie an VB6 zu senden, wäre das immer noch nützlich (dh es ist mir egal, ob die Schnittstelle in C# geschrieben und COM angezeigt oder in COM geschrieben und von C#, solange beide Seiten der Sprachbarriere auf dieselbe Schnittstelle verweisen können).
Ich finde das überraschend schwer. Ich kann auf eine Schnittstelle in C# verweisen, die von COM kommt, aber ich kann sie nicht als sichtbare COM-Schnittstelle nach COM exportieren. Wenn ich als Alternative versuche, ein Interface in C# selbst zu erstellen, habe ich keine Möglichkeit gefunden, es direkt über COM und verschiedene Workarounds zu sehen. Ich habe versucht, es indirekt zu benutzen, wie zum Beispiel eine Stub-Klasse zu erstellen Das, wenn COM sichtbar ist, erhöht Laufzeitfehler in VB6, wenn ich versuche, die exposed Stub-Klasse zu implementieren (obwohl sie kompiliert werden).
Ich habe derzeit keine gute Lösung für diese und nur eine schrecklich klobige Arbeit, die separate Schnittstellen in C# und VB6 zu implementieren, die C# -Methoden direkt zu COM verfügbar machen und erstellen Sie eine Wrapper-Klasse in VB6, die einfach die Schnittstellenmethoden umleitet zu den zugrunde liegenden wahren Methoden.
Was ist der beste Weg, um eine einzige Schnittstelle (entweder in VB6 oder C#) zu erstellen, auf die beide Sprachen verweisen können, ohne dass ich die Schnittstellendefinition duplizieren muss?
In der Tat. Der Umstieg auf C# ist das Ziel und wir haben bereits eine C# -Schicht, die die gesamte Schnittstellenlogik (ich meine hier die Benutzerschnittstelle) handhabt. Der nächste Schritt besteht darin, die Geschäftslogik zu migrieren. Offensichtlich ist eine Möglichkeit, einen "Big Bang" zu machen, alles auf einmal zu konvertieren, möglicherweise mit einem Konvertierungstool, aber es gibt eine Menge VB6-Code und ich denke über schrittweise Ansätze nach, um das Problem zu lösen. Wenn ich mit freigegebenen Klassenschnittstellen zusammenarbeiten kann, gibt es große Codeabschnitte, die einer unabhängigen Migration zugänglich werden. – DMFW