我有一个 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("", "")
在此行 - 参数数量错误或属性分配无效
感谢任何想法。
干杯
在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