2016-05-05 20 views
3

bearbeiten: Ich weiß, dass C# -Äquivalent von For Each server As String In serversforeach(var item in servers) ist aber da GetOPCServers kehrt Objekt, sollte es zu iterable Typ umgewandelt werden.System.String [*] und System.String [] Differenz in C#


Ich entwickle eine Anwendung mit einer COM-Bibliothek. Da 64bit Probleme verursacht, ist meine Ziel-CPU x86.

Alle Methoden funktionieren wie erwartet, außer GetOPCServers().

Obwohl Visual Basic-Code gleiche DLL Problem nicht verursacht, C# wirft System.InvalidCastException sagen, dass:

A first chance exception of type 'System.InvalidCastException' 
occurred in System.Core.dll 

Additional information: 
'System.String[*]' türündeki nesne 'System.String[]' türüne atılamadı. 

Entschuldigt für die Fehlermeldung, da mein OS auf Türkisch.

Das Objekt in Typ System.String[*] kann nicht zu System.String[]

Was diffence zwischen System.String[*] und System.String[] ist zugewiesen werden?

Der Code VB gleichen DLL läuft ohne Ausnahme

Public Class OpcInfo 
    Dim servers As VariantType 
    Dim server As OPCAutomation.OPCServer = New OPCAutomation.OPCServer() 


    Function GetServers() 
    Dim servers As Object 
    Dim _servers As New List(Of String) 

    servers = server.GetOPCServers() 

    For Each server As String In servers 
     _servers.Add(server) 
    Next 
    Return _servers 
    End Function 
End Class 

Aber der C# -Code verwendet auch gleiche DLL interessant Ausnahme

static void Main(string[] args) 
{ 
    var opc_servers = new OPCAutomation.OPCServer().GetOPCServers(); 
    foreach (var item in (string[])opc_servers) 
    { 
     Console.WriteLine(item); 
    } 
} 

Mehr wirft, ich in der Lage zu sehen Die Daten in Watch/Direkt-Fenstern:

watch window

Der Fehlercode -2147467262 entspricht FFFFFFFF80004002 und die Erklärung nach https://technet.microsoft.com/en-us/library/bb632794.aspx

E_NOINTERFACE 
FFFFFFFF80004002 
-2147467262 
No such interface supported 
+1

Kennen Sie schon [diese] (http://stackoverflow.com/questions/7084270/ms-word-automation-in-c-sharp-unable-to-cast-object-of- Typ-System-String)? – Pikoh

+0

Der äquivalente C# -Code zu VB-Code ist 'foreach (string item in opc_servers)'. –

+0

Danke. Aber es löst auch eine Ausnahme aus, da 'GetOPCServers' 'object' zurückgibt. – guneysus

Antwort

1

Vielen Dank allen.

Casting innerhalb der Schleife macht nicht den Trick.

als @pikoh die Antwort auf MS Word Automation in C# erklärte den Trick gemacht:

Und auch var opc_servers = ... funktionierte nicht. sein muss object opc_servers = ...

object opc_servers = new OPCAutomation.OPCServer().GetOPCServers(); 
var servers = ((Array)(opc_servers)); 


for (int i = 1; i <= servers.Length; i++) 
{ 
    Console.WriteLine((string)servers.GetValue(i)); 
} 
Verwandte Themen