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#中,通过引用传递参数时需要指定ref
关键字。
this.Group.OPCItems.Remove(1, ref h, out e);
结果证明,文档是错误的。它必须是int而不是long