java 利用jacob调用ocx控件时怎么处理带返回值的参数?

smellmine 2015-12-11 11:56:58
有哪位牛人处理过该问题,ocx控件我无法修改
接口中函数ReadData执行后,参数v1为我想要返回的数据,在C++中会看到接口的参数为:BSTR* dataBuf
long ReadData(BSTR* dataBuf)
但在java就不知道传什么去取了,尝试了几种参数类型都提示参数错误。

给出我尝试的一种,没提示错,但v1没有返回值,这是为什么?
Variant v1 = new Variant("",true);
v1.changeType(Variant.VariantString);
int iReadData = Dispatch.call(disp, "ReadData", v1).getInt();
System.out.println(",str=" + v1);
哪位仙人有办法,请帮帮忙。
在此先谢了!!
...全文
108 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
smellmine 2015-12-15
  • 打赏
  • 举报
回复
已经解决,主要还是编码和大小端问题: byte[] b = new byte[dataLen]; Variant v1 = new Variant (new String(b, "UNICODE"), true) ;//其实主要目的只是为了初始化String的长度,才能接收到相应个数的字符串 int iReadData = Dispatch.call(disp, "ReadData", v1).getInt(); String ret = new String(v1.toString().getBytes("UNICODE")); String result = ""; //接收到DTU的数据可能存在大、小端问题,如果存在这样的问题需要进行双字节间对位交换 for (int i = 0; i < ret.length();) { result += ret.charAt(i + 1); result += ret.charAt(i); i += 2; } System.out.println("result =" + result );

23,405

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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