【发布时间】:2010-12-15 07:58:17
【问题描述】:
我有一个使用 ATL 编写的 ActiveX 控件,但遇到了一个有点严重和令人困惑的问题。当使用 DISPATCH_PROPERTYPUT/METHOD 调用 iDispatch::Invoke 时,一切都很好。当我向 IE javascript 返回一个值时,在使用有效 BSTR 调用 VT_BSTR 的方法之后,它可以正常工作。
但是当我尝试时:
var stringValue = Object.stringValue;
调用 iDispatch 并使用 DISPATCH_PROPERTYGET 标志调用,并且我将返回值设置为 VT_BSTR 并使用有效的 BSTR(与我在方法调用中使用的完全相同),我在 IE 中得到一个权限被拒绝的错误框。
当我将各种其他数据类型(长整型、整数、布尔值等)返回到 IE javascript 时,它可以正常工作(使用 propertyGet() 方法)。我只在返回 VT_BSTR 时获得权限被拒绝。
有什么想法吗?
【问题讨论】:
-
你能发布你的get方法实现吗?我假设你没有返回 E_ACCESSDENIED。
-
你好,pvarResult->bstrVal = (BSTR)c; pvarResult->vt = VT_BSTR; if (wFlags == DISPATCH_PROPERTYGET) 返回 S_OK;作为说明,我刚刚在几天前放置了 if wflags == DISPATCH_PROPERTYGET 语句,以确保事情正在返回 S_OK。这对我来说是一个非常令人困惑的问题..我已经倾注了 msdn 上的 idispatch 位,但没有发现太多表明我做错了什么。在调试 bstr 时也是有效的。当在 wflags 中设置 dispatch_method 时,相同的代码块可以工作。
-
抱歉格式化。 pvarResult->bstrVal = (BSTR)c; pvarResult->vt = VT_BSTR; if (wFlags == DISPATCH_PROPERTYGET) 返回 S_OK
-
你可以编辑你的帖子,以一种很好的格式添加代码。
标签: javascript activex internet-explorer atl ole