c#将数组传递给visual basic库

本文关键字:visual basic 数组 | 更新日期: 2023-09-27 18:05:16

我试图将c#数组传递给Visual Basic库。这就是文档所说的:

4.5.4.5 Remove Description删除OPCItem语法Remove (Count As Long, ServerHandles() As Long, ByRef Errors() As Long)

Count要删除的项数处理过的项的服务器项句柄指示单个项目操作成功。

Visual Studio对象目录显示了这个方法签名:

void Remove(int NumItems, ref System.Array ServerHandles, out System.Array Errors)

我的代码是这样的:

internal void RemoveItem(OpcItem item)
{
    long[] serverHandles = new long[1];
    serverHandles[0] = item.ServerHandle;
    long[] errors = new long[1];
    Array h = serverHandles.ToArray<long>();
    Array e = errors.ToArray<long>();
    this.Group.OPCItems.Remove(1, h, out e);
}

编译器对此很满意,但是当我调用该方法时,我得到:

System.Runtime.InteropServices.SafeArrayTypeMismatchException: Das angegebene Array hat nicht den erwarteten Typ.
   bei System.StubHelpers.MngdSafeArrayMarshaler.ConvertSpaceToNative(IntPtr pMarshalState, Object& pManagedHome, IntPtr pNativeHome)
   bei GBDAAutomation.OPCItems.Remove(Int32 NumItems, Array& ServerHandles, Array& Errors)
   bei DataLogger.DataSource.OpcDataSource.RemoveItem(OpcItem item)

,表示其中一个数组的类型错误。你能告诉我,如何传递这些数组吗?我对c#和。net运行时很陌生,所以请原谅我。


编辑:

稍微摆弄了一下代码。这是我的当前版本,仍然会导致相同的错误。

Array serverHandles = Array.CreateInstance(typeof(long), 1);
serverHandles.SetValue(item.ServerHandle, 0);
Array errors;
this.Group.OPCItems.Remove(1, ref serverHandles, out errors);

c#将数组传递给visual basic库

我不知道为什么编译器对你的代码很满意。在c#中,通过引用传递参数时需要指定ref关键字。

this.Group.OPCItems.Remove(1, ref h, out e);

结果证明,文档是错误的。它必须是int而不是long