gpt4 book ai didi

C# 将数组传递给 Visual Basic 库

转载 作者:太空宇宙 更新时间:2023-11-03 10:25:34 27 4
gpt4 key购买 nike

我正在尝试将 C# 数组传递给 Visual Basic 库。这是文档所说的:

4.5.4.5 Remove Description Removes an OPCItem Syntax Remove (Count As Long, ServerHandles() As Long, ByRef Errors() As Long)

Count The number of items to be removed ServerHandles Array of server item handles for the items processed Errors Array of Long’s indicating the success of the individual items operation.

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);

关于C# 将数组传递给 Visual Basic 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31700555/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com