bearbeiten: Ich weiß, dass C# -Äquivalent von For Each server As String In servers
foreach(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 zuSystem.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:
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
Kennen Sie schon [diese] (http://stackoverflow.com/questions/7084270/ms-word-automation-in-c-sharp-unable-to-cast-object-of- Typ-System-String)? – Pikoh
Der äquivalente C# -Code zu VB-Code ist 'foreach (string item in opc_servers)'. –
Danke. Aber es löst auch eine Ausnahme aus, da 'GetOPCServers' 'object' zurückgibt. – guneysus