cbao123 发表于 2012-7-7 11:20:22

求教Variant*型返回值的获取

本帖最后由 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 /* */ HRESULT STDMETHODCALLTYPE myadd(
            /* */ long nargout,          ;输出参数的个数
            /* */ VARIANT *y,      ;输出参数
            /* */ VARIANT a,            ; 输入参数
            /* */ VARIANT b,             ; 输入参数
            /* */ VARIANT c) = 0;      ; 输入参数
我用以下AU3代码调用此COM的内置函数myadd:
$WaveAudio=ObjCreate("baoadd.Class.1_0")   
$Wa=DllStructCreate("Variant Wa")
$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环境部署文件,测试无法进行。在这里恳请高手们给一些代码修改的建议,对于您的建议我将逐个测试!谢谢!

cbao123 发表于 2012-7-7 11:31:57

由于输入、输出均为VARIANT型,翻遍国内外的网页也毫无头绪,诚请路过的高手们赐教一二,谢谢!

user3000 发表于 2012-7-7 11:36:50

附件缺少文件: MCRInstaller.exe ?
无法注册此组件!

cbao123 发表于 2012-7-7 11:48:07

谢谢您!这个文件是MATLAB的环境部署文件,有173M,无法上传啊!
页: [1]
查看完整版本: 求教Variant*型返回值的获取