Ich weiß nicht viel über Com Plus Interop-Dienste in .NET - Ich lasse .NET all die schmutzige Arbeit und ich drücke meine Finger, es wird funktionieren. Nun, jetzt stecke ich fest.Passing vb6 Objekttyp Parameter byref von .NET Interop Ursachen Typ Mismatch
Ich habe einen Verweis auf eine COM-DLL kompiliert mit VB6 in meinem VS 2010 C# -Programm. Dies ist eine Rechnung, die ich erstelle.
I instanziiert ein Objekt:
UIInvoice Invoice = new CUIInvoice();
Und ich einige Rechnungskopf Eigenschaften dann eingestellt:
Invoice.set_InvoiceType("VO");
Invoice.set_InvoiceTypeID(2);
Und jetzt möchte ich einige Rechnung Detaillinien erstellen, die ich durch den Aufruf der tun Methode eines untergeordneten Objekts der Rechnung hinzufügen:
Invoice.InvoiceDetails.Add("StringParam1", "StringParam2", Invoice);
Der dritte Parameter der Funktion Anruf in meinem VB6 hinzufügen Funktion wie folgt definiert:
ByRef Parent As Object
Wenn ich mein .NET-Programm ausführen, ich eine „Typenkonflikt“ Fehlermeldung angezeigt, wenn ich die Add-Linie getroffen.
Kann jemand in vereinfachender Weise einen Weg vorschlagen, wie ich das zum Laufen bringen kann?
Normalerweise würden Sie 'ref Invoice' in C# schreiben. Ich nehme an, Sie verwenden C# Version 4. Nichts anderes ist offensichtlich, es mag einfach nicht, dass CUIInvoice ein Elternteil ist. Vielleicht wegen "UI". –
Hallo Hans, danke für deine Antwort. Wenn ich das Invoice-Objekt mit ref übergebe, habe ich tatsächlich einen Compiler-Fehler - was ein Hinweis für diejenigen mit mehr Wissen sein kann: kann nicht von 'ref UIInvoice.CUIInvoice' in 'ref-Objekt' umgewandelt werden. Wenn ich einen statischen Objekttyp wie im Objekt temp = Invoice deklariere; und pass temp in by ref, bekomme ich den gleichen Typ Mismatch-Fehler. – user529703
Was ist der Unterschied zwischen UIInvoice und CUIInvoice? Was passiert, wenn Sie Rechnung wie folgt deklarieren: CUIInvoice Invoice = new CUIInvoice() ;? –