编辑: 我知道 For Each server As String In servers
的 C# 等价语句是 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[*]
的对象无法被赋值给System.String[]
System.String[*]
和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/zh-cn/library/bb632794.aspx的解释。
E_NOINTERFACE
FFFFFFFF80004002
-2147467262
No such interface supported
foreach (string item in opc_servers)
。 - Alessandro D'AndriaGetOPCServers
返回的是object
。 - guneysusforeach (var item in opc_servers)
是什么意思? - Pikoh(string)item
或者item as string
更为合适。 - Alessandro D'Andria