0

我开发了一个成功运行的 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)

像魅力一样工作

4

1 回答 1

0

你可以添加你的结构并从 wcf 方法返回它吗?我的意思是,而不是

int Read(ref int val1, ref int val2);

做类似的事情

[DataContract]
struct MyDataStructure {

[DataMember]
int val0;

[DataMember]
int val1;

[DataMember]
int val2;

}

...

MyDataStructure Read();
于 2013-04-25T12:56:22.203 回答