从VBScript调用.NET COM对象

我使用的是VS 2008和Windows 7。
得到一个.NET C#类,它作为COM对象公开。

[Guid("E5014B85-FCB2-4F0D-95EC-F741395A7923")] [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface DSystem { [DispId(1610809354)] void setProperties(IDictionary propertymap); } 

从VBScript调用COM对象

 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); 

我究竟做错了什么?
任何人都可以给我一个暗示吗?

不确定这一点,但我似乎依稀记得因为VBScript只使用Variants,你需要将你的方法参数声明为对象。

尝试

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

并转换为方法体内的IDictionary。