Edit:我知道 C# 相当于For Each server As String In servers
is foreach(var item in servers)
但是由于GetOPCServers
返回对象,应该将其转换为可迭代类型。
我正在使用 COM 库开发一个应用程序。由于64位会出现问题,所以我的目标CPU是x86。
所有方法都按预期工作,除了GetOPCServers()
.
虽然使用相同 dll 的 Visual Basic 代码不会导致问题,但 C# 会抛出问题System.InvalidCastException
说:
System.Core.dll 中发生“System.InvalidCastException”类型的第一次机会异常
附加信息:
'System.String[*]' 是另一个 'System.String[]' 。
由于我的操作系统是土耳其语,因此对错误消息表示歉意。
类型中的对象System.String[*]
不可能是assigned to System.String[]
有什么区别System.String[*]
and System.String[]
?
使用相同dll的VB代码运行没有异常
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
但是C#代码也使用相同的dll抛出异常
static void Main(string[] args)
{
var opc_servers = new OPCAutomation.OPCServer().GetOPCServers();
foreach (var item in (string[])opc_servers)
{
Console.WriteLine(item);
}
}
更有趣的是,我可以在“观察/立即”窗口中查看数据:
错误代码-2147467262
对应于FFFFFFFF80004002
以及根据的解释https://technet.microsoft.com/en-us/library/bb632794.aspx https://technet.microsoft.com/en-us/library/bb632794.aspx
E_NOINTERFACE
FFFFFFFF80004002
-2147467262
No such interface supported