tomyi 2014年03月24日
请教:IDispatch 增加一个属性变量Item为VARIANT类型,在SetItem中报错
最近对想在程序中支持Script,便于通过脚本取得软件中一些参数。
在参考http://support.microsoft.com/kb/221992/zh-cn后

通过接口向导添加一个Item属性,由于属性可能是常见的各种类型(BSTR,LONG,DOUBLE等)。定义为变体类型,如下:
	[ uuid(86D2FFCF-1279-465F-A04A-98EFF2E0FE9D) ]
dispinterface IMyScriptObject
{
properties:

methods:
[id(1), propget, helpstring("属性 Item")] VARIANT Item(BSTR bstrName);
[id(1), propput, helpstring("属性 Item")] void Item(BSTR bstrName, VARIANT newVal);
[id(2), helpstring("方法gcd")] LONG gcd(LONG a, LONG b);
[id(3), helpstring("方法HelpAbout")] void HelpAbout(void);
[id(4), helpstring("方法ShowValue")] void ShowValue(BSTR prompt, LONG n);
};


但在调试过程中发现SetItem 函数的第2个参数newVal是一个不能识别的类型,不知道为何?
   void CMyScriptObject::SetItem(LPCTSTR bstrName, VARIANT newVal)
{
AFX_MANAGE_STATE(AfxGetAppModuleState());

// TODO: 在此添加属性处理程序代码
CString str;
if (newVal.vt == VT_I4)
str.Format(_T("%s%d"), bstrName, newVal.intVal );
else
str.Format(_T("%s"), bstrName);

AfxMessageBox(str, MB_SETFOREGROUND);
}


对应的VBS调用如下:
Item("3") = 5

但如果我把VARIANT 改为某个确定的类型,如LONG,程序是没有错误的。为啥VARIANT 就不行呢?
...全文
220 点赞 收藏 8
写回复
8 条回复

还没有回复,快来抢沙发~

发动态
发帖子
ATL
创建于2007-09-28

3021

社区成员

4.8w+

社区内容

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区公告
暂无公告