找回密码
 加入
搜索
查看: 3516|回复: 3

[AU3基础] 求教Variant*型返回值的获取

[复制链接]
发表于 2012-7-7 11:20:22 | 显示全部楼层 |阅读模式
本帖最后由 cbao123 于 2012-7-7 11:59 编辑

本人使用MATLAB写了一个自定义函数的脚本,代码如下:
function y = myadd(a,b,c)   ;c参数用于验证字符串型参数的传递,与返回值无关系
   y = a+b;
   disp(y);
   fid=fopen('char2.txt','w');此后代码用于验证本脚本是否成功调用,若成功则将y值写入char2.txt
   fprintf(fid,'%d',y);
   fclose(fid); 
然后使用MATLAB的com工具,将上面的函数代码封装成DLL形式的com组件(对象),封装后的com接口定义如下(注:封装原理是将MATLAB脚本代码转换为c代码,再将C代码封装成DLL,所以com的内函数的定义是c形式的):
        virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE myadd( 
            /* [in] */ long nargout,          ;输出参数的个数
            /* [out][in] */ VARIANT *y,        ;输出参数
            /* [in] */ VARIANT a,              ; 输入参数
            /* [in] */ VARIANT b,             ; 输入参数
            /* [in] */ VARIANT c) = 0;        ; 输入参数
我用以下AU3代码调用此COM的内置函数myadd:
$WaveAudio=ObjCreate("baoadd.Class.1_0")    
$Wa=DllStructCreate("Variant Wa[256]")
$pWa=DllStructGetPtr($Wa)
$Waa=$WaveAudio.myadd(1,$pWa,6,7,"c:\trane") 
MsgBox(0,"",$Wa) 
MsgBox(0,"",$Waa) 
结果是可以成功调用com的内置函数myadd,但是始终无法获取该函数的返回值y,显示为0;在此求教高手该如何修改,十分感谢!
     下面这个链接是其它语言调用此类COM的案例,敬请参考:
http://ljf9310.blog.163.com/blog/static/6353400201061434235136/
附件是已经打包的DLL文件,请先将后缀“.au3”改为“.exe”。然后直接双击“baoadd_pkg.exe”即可完成注册,注册表内建立类名为“baoadd.Class.1_0”对象。欢迎测试!

谢谢user3000 大侠的提醒,附件中还缺少名为“MCRInstaller.exe”的MATLAB环境部署文件,测试无法进行。在这里恳请高手们给一些代码修改的建议,对于您的建议我将逐个测试!谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-7-7 11:31:57 | 显示全部楼层
由于输入、输出均为VARIANT型,翻遍国内外的网页也毫无头绪,诚请路过的高手们赐教一二,谢谢!
发表于 2012-7-7 11:36:50 | 显示全部楼层
附件缺少文件: MCRInstaller.exe ?
无法注册此组件!
 楼主| 发表于 2012-7-7 11:48:07 | 显示全部楼层
谢谢您!这个文件是MATLAB的环境部署文件,有173M,无法上传啊!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 07:13 , Processed in 0.081839 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表