2011-02-03 59 views
7

我使用VS 2008和Windows 7.
得到了一個作爲COM對象公開的.NET C#類。從VBScript調用.NET COM對象

[Guid("E5014B85-FCB2-4F0D-95EC-F741395A7923")] 
[InterfaceType(ComInterfaceType.InterfaceIsDual)] 

public interface DSystem 
{ 

    [DispId(1610809354)] 
    void setProperties(IDictionary propertymap); 

} 

COM對象從一個VBScript

dim dSystem 
set dSystem = CreateObject("MYCOMOBJECT") 

Dim objDictionary 
Set objDictionary = CreateObject("System.Collections.Hashtable") 
objDictionary.Add "PROP1", "abc" 
objDictionary.Add "PROP2", "zyx" 

dSystem.setProperties(objDictionary) 

一切所謂的正常工作......但是,從 一個void返回類型更改爲bool

[DispId(1610809354)] 
    bool setProperties(IDictionary propertymap); 

success = dSystem.setProperties(objDictionary) 

導致錯誤

Microsoft VBScript運行時錯誤 '800a0005'
無效的過程調用或參數


.tlb文件似乎是確定

[id(0x6003000a)] 
HRESULT setProperties(
[in] IDictionary* propertymap, 
[out, retval] VARIANT_BOOL* pRetVal); 


我究竟做錯了什麼?
有人可以給我一個提示嗎?

+1

這個新手問題很好。 – sharptooth 2011-02-03 11:27:33

回答

4

不確定這一點,但我似乎隱約記得,因爲VBScript只使用變種,你需要聲明你的方法參數爲對象。

嘗試

[DispId(1610809354)]  
bool setProperties(object propertymap); 

和投射到一個IDictionary方法體內部。

+0

是啊!完美的作品!非常感謝,喬! – ak75 2011-02-03 11:20:02

相關問題