【求助】JACOB对于组件函数输出参数的处理

sxww321 2010-10-21 10:03:05
现在项目中有一个需求,客户给了一个组件exe形式的服务组件,里面有一个函数,该函数有两个输入参数,1个输出参数,1个返回值,函数原型如下:

HRESULT Encrpt([in] SAFEARRAY(byte)* pDataIn,
[Out] SAFEARRAY(byte)* pDataOut,
[in] VARINT_BOOL IsLastBlock,
[out,retval] OperationResultEnum* pRetVal);


我现在想要通过JACOB调用该函数,JAVA代码如下:


//获取SFEL组件
ActiveXComponent sfel = new ActiveXComponent("SFEL.FileEncryptor");
String s1="123";//传入参数
String s2="321";//传出参数
int oper_state = Dispatch.call(sfel,"Encrypt",s1,s2).getInt();//取得返回值


s1传入函数后会进行加密,加密后的内容由S2传出,但是JAVA中是值传递,现在获取不到s2的有效值。
...全文
505 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yunxiangfu 2013-03-01
  • 打赏
  • 举报
回复
灰常感谢!!succinite!!!
cza55007 2012-12-19
  • 打赏
  • 举报
回复
非常感谢succinite大哥,搞了一天了。
succinite 2011-02-17
  • 打赏
  • 举报
回复
给个参考吧,我知道很多人对如何取的输出参数的事情头大。
函数原型定义
HRESULT getFace([in] long num1,[in] long num2,[out] BSTR *pVal1,[out,retval] BSTR *pVal2 )
两个输入参数,一个输出参数。一个返回值
函数内方法
*pVal1=::SysAllocString(L"这是输出参数[out]");
*pVal2=::SysAllocString(L"这是返回值[out,retval]");



java代码如下
ActiveXComponent axc = new ActiveXComponent("testcom.Test");//获取对象
Dispatch dis = axc.getObject();

String str ="";//初始化
Variant v1 = new Variant(str,true);//输出参数定义,必须这样,否则得不到输出参数的值

Variant v2=new Variant();//返回值定义
v2 = Dispatch.call(dis, "getFace", new Variant(100),new Variant(200),v1);

System.out.println("输出参数值:"+v1);
System.out.println("返回值:"+v2);


经过测试,可以得到如下结果:
输出参数:这是输出参数[out]
返回值:这是返回值[out,retval]



sxww321 2010-10-21
  • 打赏
  • 举报
回复
jiazimo,你上面说的方法我试过了,获取回来的还是返回值,调用的函数除了返回值还有一个输出参数,输出参数的值现在不知道如何获取?
jiazimo 2010-10-21
  • 打赏
  • 举报
回复
Variant var = Dispatch.call(sfel,"Encrypt",s1,s2).getInt();//取得返回值
var.getInt();

这样行吗?
弄过一次忘了记下来,唉

jiazimo 2010-10-21
  • 打赏
  • 举报
回复
int oper_state = Dispatch.call(sfel,"Encrypt",s1,s2).getInt();//取得返回值

int oper_state 是call的返回值,是不是有一个A** 可变对象的

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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