2009-04-07 14 views
0

In C# Ich rufe eine Funktion auf einer Interop-Klasse (Verbindung, in VB6 geschrieben), die selbst ein einfaches Objekt zurückgibt (-System). Dann gibt es eine Funktion für dieses Objekt (InitialiseData), die ich auch anrufe (obwohl der Compiler es nicht bemerkt).Aufrufen von Methoden auf Interop-Objekte, VB vs. C#

var isInitialised = Connection.System.InitialiseData(path); 

Das Problem ist, weil das Systemobjekt ist ein bloßes Objekt zurückkehrt, erhalte ich den Compiler-Fehler „kann Symbol nicht lösen“. Ich kann sehen, warum, aber das Gleiche funktioniert in VB.NET fein:

Dim isInitialised As Boolean = Connection.System.InitialiseData(path) 

Vermutlich VB.NET etwas im Hintergrund tut, die eine Art implizite späte Bindung ermöglicht, während C# nicht der Fall ist? Gibt es eine Möglichkeit, C# ähnlich unwissend zu kompilieren?

In der Tat in diesem Fall scheine ich um es in der Lage sein zu arbeiten, indem das Objekt auf die explizite Interop Typ Gießen zuerst:

var system = (QLO.System)Connection.System; 
var isInitialised = system.InitialiseData(path); 

Aber ich bin immer noch daran interessiert, Antworten für Fälle, in denen ich gewonnen 't in der Lage zu einem Typ zu werfen, aber noch Funktionen auf es aufrufen wollen. Verzeih mir, wenn das eine dumme Frage ist, ich beginne gerade erst, von VB.NET zu C# zu wechseln ... danke!

Antwort

1

Späte Bindung kommt zu C# in 4.0. Was Sie in der Zwischenzeit tun können, ist die Funktion in VB.NET umbrechen und C# verwenden, um die VB.NET-Methode aufzurufen, die die VB6-Methode aufruft.

Da das Umwandeln in den richtigen Typ in C# funktioniert, bedeutet das, dass VB.NET den richtigen Typ erkennt und C# es als Objekt sieht?

Verwandte Themen