ATL控件和JS通信

CHwhoami 2018-07-24 05:19:42
新手想请教一个问题,我的ATL控件开发环境是vs2015。在添加方法时,为什么带有[out][retval]属性的返回值必须是指针类型的。


如图所示,当参数类型为BSTR时,retval和out选项框时黑色的。只有当参数类型为BSTR*时,这两个选项才是可选的。其他的类型也是这样。
可是JS里面好像没法识别指针呀,所以请问JS和ATL控件之间一般是怎么传递字符串的?
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒋晟 2018-07-28
  • 打赏
  • 举报
回复
out类型的必须是指针,因为调用者负责释放被调用函数返回的字符串的内存,所以需要获得字符串的地址。
Saleayas 2018-07-27
  • 打赏
  • 举报
回复
C语言参数是传值的,所以只有指针才可以带回返回的值。这就是 retval 必须是指针的原因。 因为 COM 接口方法的返回值必须 HRESULT 这个表示 COM的结果,而不知方法的结果。 脚本和 COM 的交互的时候,几乎所有的参数都是 VARIANT 的。 字符串使用是 BSTR ,但是这个 BSTR 也是经过 VARIANT 封装的。 其实就是你在 COM 的 C/C++ 模式的时候,你也不会在使用到 COM 的字符串指针的。 你使用的都是 BSTR ,但是这个却是指针的。 很多高级语言里面的,Object 都是引用的,其实就是指针,有的甚至是指针的指针。
薛定谔之死猫 2018-07-26
  • 打赏
  • 举报
回复
ActiveX和JS通讯走的是IDispatch接口的那种套路吧,变量是超大枚举,自适应

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧