C# System.String[*]和System.String[]在C中的差异#
Edit:我知道每个服务器作为服务器中的字符串的C# System.String[*]和System.String[]在C中的差异#,c#,vb.net,com,C#,Vb.net,Com,Edit:我知道每个服务器作为服务器中的字符串的的C等价物是foreach(服务器中的var项),但由于getopcserver返回对象,所以应该将其转换为iterable类型 我正在使用COM库开发一个应用程序。由于64位导致问题,我的目标CPU为x86 除了getopcserver()之外,所有方法都按预期工作 虽然使用相同dll的Visual Basic代码不会导致问题,但C#抛出System.InvalidCastException表示: A first chance exceptio
的C等价物是foreach(服务器中的var项)
,但由于getopcserver
返回对象,所以应该将其转换为iterable类型
我正在使用COM库开发一个应用程序。由于64位导致问题,我的目标CPU为x86
除了getopcserver()
之外,所有方法都按预期工作
虽然使用相同dll的Visual Basic代码不会导致问题,但C#抛出System.InvalidCastException
表示:
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ı.
由于我的操作系统是土耳其语的,因此对错误消息表示歉意
无法将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
static void Main(string[] args)
{
var opc_servers = new OPCAutomation.OPCServer().GetOPCServers();
foreach (var item in (string[])opc_servers)
{
Console.WriteLine(item);
}
}
但是C代码也使用相同的dll抛出异常
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
static void Main(string[] args)
{
var opc_servers = new OPCAutomation.OPCServer().GetOPCServers();
foreach (var item in (string[])opc_servers)
{
Console.WriteLine(item);
}
}
更有趣的是,我能够在监视/即时窗口中查看数据:
错误代码-2147467262
对应于FFFFFFFF80004002
以及根据
谢谢大家
在圈内施法并不成功
正如@pikoh所说的,这个问题的答案是:
而且,var opc_servers=…
也不起作用。必须是对象opc\U服务器=…
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));
}
object opc_servers=new OPCAutomation.OPCServer().getopcserver();
var服务器=((阵列)(opc_服务器));
对于(int i=1;我看到了吗?与VB代码等价的c代码是foreach(opc#U服务器中的字符串项)
。谢谢。但它也会引发异常,因为getopcserver
返回object
那么foreach(opc#U服务器中的var项)呢
?它返回一个非一致数组,在COM中非常常见。通常,因为数组的下界不是0,所以1是下一个常用选项。强制转换为(数组)并使用array.GetLower/UpperBound()和array.GetValue()。