0

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

但是当我尝试时:

var stringValue = Object.stringValue;

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

当我将各种其他数据类型(长整型、整数、布尔值、...等)返回到 IE javascript 时,它可以正常工作(使用 propertyGet() 方法)。我只在返回 VT_BSTR 时获得权限被拒绝。

有任何想法吗?

4

1 回答 1

0

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

考虑使用 CComBSTR 或 CComVARIANT 在此过程中为您提供帮助,还请阅读Eric 的 BSTR 语义完整指南

于 2009-11-16T16:08:05.260 回答