SafeArrayTypeMismatchException:指定的数组不是预期的类型
SafeArrayTypeMismatchException: The specified array is not of the expected type
我正在尝试从 OPC DA 服务器读取数据。我正在使用 SyncRead 方法
SyncRead(short Source, int NumItems, ref Array ServerHandles, out Array Values, out Array Errors, out object Qualities, out object TimeStamps);
问题是我不知道参数值数组的确切类型。
我是这样做的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OPCAutomation;
using EasyModbus;
using System.Threading;
using System.IO;
Array ServerHandles = new Array[ObjOPCGroup.OPCItems.Count];
Array Values = new Array[ObjOPCGroup.OPCItems.Count];
Array Errors = new Array[ObjOPCGroup.OPCItems.Count];
object Qualities = new object();
object TimeStamps = new object();
Array Values = new Array[ObjOPCGroup.OPCItems.Count];
ObjOPCGroup.SyncRead(
(short)OPCDataSource.OPCDevice,
ObjOPCGroup.OPCItems.Count,
ref ServerHandles,
out Values,
out Errors,
out Qualities,
out TimeStamps
);
当我启动应用程序时,出现错误:
System.Runtime.InteropServices.SafeArrayTypeMismatchException: 指定的数组不是预期的类型
有人可以帮助我吗?
谢谢
new Array[length]
是 个数组 的数组;您可能想要一个更合适的数组,例如 new int[length]
用于整数数组,或 new string[length]
用于字符串数组。我们不知道这里的 API 是什么,所以我们无法告诉您它们应该是什么。但它们几乎肯定不应该是 Array
.
的数组
另外:其中大部分作为 out
参数传递,因此您 可能 除了 ServerHandles
之外甚至不需要初始化任何东西。剩下的大概都是null
吧?或者只是通过 out var
初始化,即
Array serverHandles = new SomeOtherTypeHere[ObjOPCGroup.OPCItems.Count];
ObjOPCGroup.SyncRead(
(short)OPCDataSource.OPCDevice,
ObjOPCGroup.OPCItems.Count,
ref serverHandles,
out var values,
out var errors,
out var qualities,
out var timeStamps
);
我正在尝试从 OPC DA 服务器读取数据。我正在使用 SyncRead 方法
SyncRead(short Source, int NumItems, ref Array ServerHandles, out Array Values, out Array Errors, out object Qualities, out object TimeStamps);
问题是我不知道参数值数组的确切类型。
我是这样做的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OPCAutomation;
using EasyModbus;
using System.Threading;
using System.IO;
Array ServerHandles = new Array[ObjOPCGroup.OPCItems.Count];
Array Values = new Array[ObjOPCGroup.OPCItems.Count];
Array Errors = new Array[ObjOPCGroup.OPCItems.Count];
object Qualities = new object();
object TimeStamps = new object();
Array Values = new Array[ObjOPCGroup.OPCItems.Count];
ObjOPCGroup.SyncRead(
(short)OPCDataSource.OPCDevice,
ObjOPCGroup.OPCItems.Count,
ref ServerHandles,
out Values,
out Errors,
out Qualities,
out TimeStamps
);
当我启动应用程序时,出现错误: System.Runtime.InteropServices.SafeArrayTypeMismatchException: 指定的数组不是预期的类型
有人可以帮助我吗?
谢谢
new Array[length]
是 个数组 的数组;您可能想要一个更合适的数组,例如 new int[length]
用于整数数组,或 new string[length]
用于字符串数组。我们不知道这里的 API 是什么,所以我们无法告诉您它们应该是什么。但它们几乎肯定不应该是 Array
.
另外:其中大部分作为 out
参数传递,因此您 可能 除了 ServerHandles
之外甚至不需要初始化任何东西。剩下的大概都是null
吧?或者只是通过 out var
初始化,即
Array serverHandles = new SomeOtherTypeHere[ObjOPCGroup.OPCItems.Count];
ObjOPCGroup.SyncRead(
(short)OPCDataSource.OPCDevice,
ObjOPCGroup.OPCItems.Count,
ref serverHandles,
out var values,
out var errors,
out var qualities,
out var timeStamps
);