我有一个 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)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |