C# System.String[*]和System.String[]在C中的差异#

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

Edit:我知道每个服务器作为服务器中的字符串的
的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()。