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

Mar*_*son 3 c# vb6

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

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

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

工作代码如下所示。

VB6应用程序

Dim Result_ As BioxScan_Status

Result_ = ObjWinBio.OpenDevice
Run Code Online (Sandbox Code Playgroud)

C# DLL

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

return BioxScan_Status.Connected ;
}


public enum BioxScan_Status
{
    Connected,
    Disconnected,
    Idle,
    Busy,
    Completed,
    Error,
    CaptureComplete
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,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();

    ..........
 }
Run Code Online (Sandbox Code Playgroud)

VB6应用程序

Dim Res()
Res = ObjWinBio.OpenDevice("", "")
Run Code Online (Sandbox Code Playgroud)

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

欣赏任何想法。

干杯

小智 6

在 VB6 中,您不能直接返回 tuple。但是,您可以通过返回自定义类来工作。下面是修改后的 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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Dim Status As String
Dim UnitId As String

Status = Res.Status
UnitId = Res.UnitId
Run Code Online (Sandbox Code Playgroud)