我开发了一个成功运行的 WCF 服务。然后我在 Excel 中有一些 VBA 代码,是我按照本指南编写的 - http://damianblog.com/2009/07/05/excel-wcf/
它正在工作,我已经使用具有参数和返回值的简单函数对其进行了测试 - 它正确返回结果。我现在需要的是通过引用传递几个参数,在函数中设置它们的值,然后返回。为此,我创建了这个测试函数:
// interface...
[OperationContract]
int Read(ref int val1, ref int val2);
// implementation...
public void Read(ref int val1, ref int val2)
{
val1 = 10;
val2 = 20;
}
我从 VBA 模块中调用它,如下所示:
val1 = 0
val2 = 0
Call service1.Read(val1, val2)
MsgBox val1
MsgBox val2
我最后得到的值是 20 和 0,而不是 10 和 20。
是否不支持超过 1 个 'byref' 参数,或者我在这里做错了什么?
PS 另一个有趣的事情是我不能将 val1 声明为整数或长整数,因为 service1.Read() 调用返回异常“类型不匹配”。它似乎只适用于 Variant 类型。
编辑:好的,我通过从函数返回一个对象数组来解决这个问题。像这样的东西:
// interface...
[OperationContract]
object[] Read();
// implementation...
public object[] Read()
{
return new object[4] { 10, 20, "hello world", DateTime.Now };
}
在 VBA 中:
Dim val() As Variant
val = service1.Read()
MsgBox val(0)
MsgBox val(1)
MsgBox val(2)
MsgBox val(3)
像魅力一样工作