1

我正在尝试从 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:指定的数组不是预期的类型

任何人都可以帮助我吗?

谢谢

4

1 回答 1

1

new Array[length]是一个数组数组;您可能想要一个更合适的数组,例如new int[length]用于整数new string[length]数组或字符串数​​组的数组。我们不知道这里的 API 是什么,所以我们无法告诉您它们应该是什么。但它们几乎肯定不应该是Array.

另外:其中大部分都是作为out参数传递的,所以你可能甚至不需要初始化任何东西,除了ServerHandles. 其余的大概都是nullout var或者只是通过ie初始化

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
   );
于 2020-02-27T17:06:53.940 回答