【发布时间】:2013-05-06 21:49:04
【问题描述】:
我正在为应用程序实现 COM 自动化(双接口)。自动化接口将从 VBScript 中调用。我不太清楚该方法的参数允许哪些类型。我知道基本上值必须适合VARIANT,但这是否意味着int 类型的每个参数都必须通过VARIANT,或者可以直接通过int?
例如,我的 MIDL 文件中有两种方法:
HRESULT SetDate([in] int Year, [in] int Month, [in] int Day);
HRESULT GetDate([out] int* pYear, [out] int* pMonth, [out] int* pDay);
从 VBScript 调用 SetDate 有效。如图调用GetDate失败,也就是说在C++的实现中,ITypeInfo::Invoke返回一个类型错误的代码。
我观察到,如果我使用VARIANT 而不是int,如下所示,它可以工作。
HRESULT GetDate([out] VARIANT* pYear, [out] VARIANT* pMonth, [out] VARIANT* pDay);
那么int 不允许用于参数(因为双接口),还是我必须做其他错误?如果 int 不允许,为什么 SetDate 工作 - in 和 out 参数在这方面有区别吗?
此外,这对方法有效,尽管两者都使用int:
[propget] HRESULT System([out, retval] int* pSystem);
[propput] HRESULT System([in] int System);
为什么 - 对于一个属性,允许的参数类型的规则是否不同,或者当参数声明为 retval 时?
我无法完全理解这一切 - 如果有人能澄清这一点,我将不胜感激。
【问题讨论】:
标签: com vbscript automation