0
我開發了一個成功工作的WCF服務。然後,我在Excel中有一些VBA代碼,我按照本指南編寫 - http://damianblog.com/2009/07/05/excel-wcf/從Excel中的VBA代碼調用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'參數或者我在這裏做錯了什麼?
P.S.另一個有趣的事情是我不能將val1聲明爲整數或long,因爲然後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)
工作就像一個魅力
沒有,很遺憾,我不能。我得到一個異常「必需」類型'屬性沒有設置。「當我從VBA調用它時。實際上,如果我在接口的任何地方定義了數據契約,那麼我無法從VBA調用任何WCF的函數。這裏有一個關於這個問題http://stackoverflow.com/questions/8001926/using-a-wcf-service-that-contains-a-datacontract-inside-excel-vba(他結束了使用2個不同的接口來解決問題) – Vampire 2013-04-25 14:06:49
哦,但是當我去了並重新閱讀我使用的指南時,你剛剛給了我一個想法。它說:「我發現最好保留原始類型和原始類型的數組,數據契約似乎是不可行的。」我可以使用數組!我可以返回一個對象數組。我需要測試一下 – Vampire 2013-04-25 14:20:44