ak7*_*k75 7 c# com vbscript interop
我使用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);
}
Run Code Online (Sandbox Code Playgroud)
从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)
Run Code Online (Sandbox Code Playgroud)
一切正常......但是,返回类型从改变void为bool
[DispId(1610809354)]
bool setProperties(IDictionary propertymap);
Run Code Online (Sandbox Code Playgroud)
和
success = dSystem.setProperties(objDictionary)
Run Code Online (Sandbox Code Playgroud)
导致错误
Microsoft VBScript运行时错误"800a0005"
无效的过程调用或参数
.tlb文件似乎没问题
[id(0x6003000a)]
HRESULT setProperties(
[in] IDictionary* propertymap,
[out, retval] VARIANT_BOOL* pRetVal);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
任何人都可以给我一个提示吗?
对此不确定,但我似乎隐约记得,因为VBScript仅使用Variants,所以需要将方法参数声明为object。
尝试
[DispId(1610809354)]
bool setProperties(object propertymap);
Run Code Online (Sandbox Code Playgroud)
并转换为方法主体内的IDictionary。
| 归档时间: |
|
| 查看次数: |
3367 次 |
| 最近记录: |