c# – 从VBScript调用.NET COM对象

前端之家收集整理的这篇文章主要介绍了c# – 从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 runtime error ‘800a0005’
Invalid procedure call or argument

.tlb文件似乎没问题

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

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

解决方法

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

尝试

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

并转换为方法体内的IDictionary.

猜你在找的C#相关文章