• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ATL控件用参数返回数据的问题

ATL控件用参数返回数据的问题

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl控件,atl34砂轮,atl方形动力电池,atl80.dll官方下载,atl71.dll一键修复等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ATL控件用参数返回数据的问题
描述:

ATL控件用参数返回数据的问题
在控件ATLctl中有一个方法:getID()
idl的定义为:
[id(4), helpstring("method getID")] 
HRESULT getID([in,out]short *n, [out, retval]BSTR *pVal);
ATLctl.h的定义为:
public:
STDMETHOD(getID)(/*[in,out]*/short *n,/*[out, retval]*/BSTR *pVal);
ATLctl.cpp的实现为:
STDMETHODIMP ATLctl::getID(short *n,BSTR *pVal)
{
// TODO: Add your implementation code here
*n=100;
BSTR bstr1=_com_util::ConvertStringToBSTR("ID数据");
*pVal=bstr1;
return S_OK;
}
在HTML中:
<script>
function window.onload(){
var n=6
alert(ATLctl.getID(n))//显示“ID数据”,是对的
alert(n)//显示“6”,说明没有返回数据;
</script>
请问,问题出在那里?


解决方案1:

需要将[in,out]short *n 改写成为[out,retval]short *n; retval表示作为函数的返回值返回,但是一个函数好像只能有一个返回值,所以楼主要不再写一个接口函数用来返回n的值,或者将n的值和字符串“ID数据”捆绑在一起返回,然后再分析返回的字符串获得n的值

解决方案2:

严格意义上,javascript中,行参与实参之间只有值传递,没有传指针(地址)的概念,只是当实参是一个对象时,行参与实参之间传递的值是这个对象的“句柄”而已。我们习惯称之为:引用传递。这一点和c是要区分开的。
上边的变量:var n = 6; //这个n必须是个Object类型才行
所以,你可以试着改成:var n = new Object();

解决方案3:

ATLctl.getID(n) //getID的参数是个指针,不是值,这样做是传值
script我不懂,但是你这里的n是形参传不回来值的,如果在C++中应该这样调用:
long n = 0;
ATLctl.getID(&n); //这样是传址
你可以试一试...

解决方案4:

short *n 改成:long *n 试一试...

解决方案5:

http://www.china-askpro.com/msg49/qa64.shtml

解决方案6:

如果楼主的函数是下面形式
ATLctl.h的定义为:
public:
STDMETHOD(getID)(/*[in]*/short n,/*[out, retval]*/BSTR *pVal);//不让n成为指针
STDMETHODIMP ATLctl::getID(short n,BSTR *pVal)//不让n成为指针
{
// TODO: Add your implementation code here
n=100;
BSTR bstr1=_com_util::ConvertStringToBSTR("ID数据");
*pVal=bstr1;
return S_OK;
}
在VB脚本中采用下面形式可以得到"ID数据"字串
Set obj = CreateObject("xxx.xxx")
Dim Temp
        Temp= obj.getID(12)
        MsgBox Temp
Set obj = nothing
所以,建议楼主试试在返回值 (/*[out, retval]*/ )
用结构(或者是结构的指针)来返回多个结果


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于cabarc打包atl控件的问题,郁闷中~~~
  • ATL控件2问
  • 关于ATL做复合控件的问题
  • 大家一般都怎么打包Atl开发的ActiveX控件?
  • 使用ATL编写控件的接收器时,怎样在事件处理方法中得到事件源接口?
  • 请教,ATL写的ActiveX控件在IE中加载时接口的调用顺序
  • 在一个atl的复合控件项目中,如果调用其它ocx控件的方法??
  • 如何使用ATL编写的COM控件来播放AVI文件,需要在IE上使用的
  • 如何得到用ATL作的控件的窗口句柄,试了几个都无效,怎么回事?
  • 想用ATL做个控件,但这是怎么回事?

相关文章

  • 2017-06-05 ocx的证书问题
  • 2017-06-05 vc开发视频播放器升级教程
  • 2017-06-05 高手指教,能不能对MFC的扩展dll进行动态调用,导出类怎样声明,怎样调用(最好有代码)?
  • 2017-06-05 要建立一个out-of-process的DLL,和一般的有什么区别?
  • 2017-06-05 100分,求键盘钩子源代码,不够可另开贴
  • 2017-06-05 各位大侠,能不能不用dll做钩子
  • 2017-06-04 求教高手:在ATL生成的DCOM服务器端程序(ServiceEXE里,如何设一个全局变量。
  • 2017-06-05 MAKEINTRESOURCE进行地址转换时的问题
  • 2017-06-04 初学COM一些不明白的问题
  • 2017-06-04 如何用程序向Word中插入一段公式(象公式编辑器一样)?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 暴急!!!高手们!!如何得到进程的真实句柄?
    • 想做个取得游戏手柄设备输入(用directinput的组件!!
    • 高手请进!(高分)
    • 自己总结的OLE操作EXCEL的常数宏
    • 在IE里启用ActiveX文档服务器程序?
    • 如何能循环显示出数据表中的字段值?
    • 多线程问题,急!高分求解。
    • 紧急求助!!!
    • 怎么在dll的导出函数中打开一个对话框窗口?
    • 模式对话框与多线程一起使用,当弹出模式对话框时,会中断另一个线程?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有