在IE中使用iDispatch DISPATCH_PROPERTYGET拒绝权限

时间:2009-11-11 03:33:38

标签: javascript activex internet-explorer atl ole

我有一个使用ATL编写的ActiveX控件,并且遇到了一个有点严重且令人困惑的问题。当使用DISPATCH_PROPERTYPUT / METHOD调用iDispatch :: Invoke时,一切都很好。当我将一个值返回给IE javascript时,在使用有效BSTR的VT_BSTR的方法调用之后,它可以正常工作。

但是当我尝试时:

var stringValue = Object.stringValue;

调用使用DISPATCH_PROPERTYGET标志调用的iDispatch,并使用有效的BSTR(与方法调用使用的完全相同)将返回值设置为VT_BSTR,我在IE中获得了一个权限被拒绝错误框。

当我将各种其他数据类型(long,整数,bool等等)返回到IE javascript时,它工作正常(使用propertyGet()方法)。返回VT_BSTR时,我才被拒绝。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在上面的评论中,您将c转换为BSTR。什么是c?如果你实际上没有打电话给SysAllocString()来创建BSTR,那很可能是你问题的根源。

请考虑使用CComBSTR或CComVARIANT来帮助您完成此过程,同时请阅读Eric's complete guide to BSTR semantics