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

}

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


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


不知道这一点,但我似乎隐约记得,因为VBScript只使用变种,你需要将你的方法参数声明为对象。

尝试

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

并将其转换为方法体内的IDictionary。

链接地址: http://www.djcxy.com/p/50445.html

上一篇: calling .NET COM object from VBScript

下一篇: C# HttpListener 'Bad request' problem