【发布时间】:2013-04-25 11:11:56
【问题描述】:
我开发了一个成功运行的 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' 参数还是我在这里做错了什么?
附:另一个有趣的事情是我不能将 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)
工作就像一个魅力
【问题讨论】:
标签: wcf excel pass-by-reference vba