返回 C# 元组时参数数量错误或属性赋值无效 (VB6)?

问题描述 投票:0回答:1

我有一个 VB6 应用程序和一个用于 C 对象的 C# 包装器。

它在构建时工作正常,但是现在我尝试将 C# 包装器中的两个值返回到 VB6 应用程序,而不是返回原始的一个值,现在我收到消息 - 参数数量错误或属性分配无效.

我猜我只是不知道如何正确返回多个值。我当然已经用谷歌搜索并应用了一些想法,但仍然没有成功。

工作代码如下所示。

VB6 应用程序

Dim Result_ As BioxScan_Status

Result_ = ObjWinBio.OpenDevice

C# DLL

public BioxScan_Status OpenDevice()
{
.........

return BioxScan_Status.Connected ;
}


public enum BioxScan_Status
{
    Connected,
    Disconnected,
    Idle,
    Busy,
    Completed,
    Error,
    CaptureComplete
}

上面的代码工作正常,VB6应用程序调用C#函数并获取BioxScan_Status.Connected的返回值

但是...

我现在想做的是返回两个值。一个String值,一个Int值,即BioxScan_Status.Connected,也是一个UnitID

这是我尝试过的

C# DLL

public (string, string) OpenDevice()
{
.........

return (Convert.ToString(BioxScan_Status.Connected), Convert.ToString(_unitId));
}


public interface IWinbioWrap
{
    [DispId(1)]
    //BioxScan_Status OpenDevice(); // done
    (string, string) OpenDevice();

    ..........
 }

VB6 应用程序

Dim Res()
Res = ObjWinBio.OpenDevice("", "")

在此行 - 参数数量错误或属性分配无效

感谢任何想法。

干杯

c# vb6
1个回答
3
投票

在VB6中,你不能直接返回元组。但是,您可以通过返回自定义类来工作。这是修改后的 C# 代码:

public class BioxScanResult
{
    public string Status { get; set; }
    public string UnitId { get; set; }
}

public BioxScanResult OpenDevice()
{
 ...

    var result = new BioxScanResult
    {
        Status = BioxScan_Status.Connected.ToString(),
        UnitId = _unitId.ToString()
    };

    return result;
}

现在,您可以更新 VB6 代码以使用 BioxScanResult 类:

Dim Res As Object
Set Res = ObjWinBio.OpenDevice()

Dim Status As String
Dim UnitId As String

Status = Res.Status
UnitId = Res.UnitId
© www.soinside.com 2019 - 2024. All rights reserved.