通过jacob,使java代码可以调用com,关于java代码中的函数名问题

recluse 2013-03-06 10:26:18
我用ATL写的dll

其中有一个函数:
1).idl 文件中
[id(1), helpstring("get version info")] HRESULT GetVersion([out,retval] LONG* lVer);
[id(2), helpstring("sum")] HRESULT AddNum([in] LONG num1, [in] LONG num2, [out, retval] LONG* sum);


2).cpp 文件中
STDMETHODIMP CUKeyManager::GetVersion(LONG* lVer){}
STDMETHODIMP CUKeyManager::AddNum(LONG num1, LONG num2, LONG* sum){}


3)然后通过jacob调用这个dll,java中要做一个jar包,包中有一个类,类有两个函数

public int GetVersion()
{
return Dispatch.call(this, "GetVersion").getInt();
}
public int AddNum(int sum1, int sum2)
{
return Dispatch.call(this, "AddNum", sum1, sum2).getInt();
}


4)java中调用这个函数

Sxxx s = new Sxxx();
System.out.println("sum = " + s.AddNum(1, 11)); //结果正确,输出:sum = 12;
System.out.println("version: " + s.GetVersion()); //错误


错误信息如下:
Exception in thread "main" com.jacob.com.ComFailException: Invoke Failed: GetVersion
at com.jacob.com.Dispatch.invokev(Native Method)
at com.jacob.com.Dispatch.call(Dispatch.java)
at security._SecuredExt.IsRunning(_SecuredExt.java:27)
at security.SecuredExtTest.main(SecuredExtTest.java:19)


我想问下,我要在(3)中的代码要怎么写,才可以和com中的GetVersion接口对应,函数名没有问题。
...全文
251 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Daisy__Ben 2013-03-17
  • 打赏
  • 举报
回复
引用 2 楼 zhangkaifei_198902 的回复:
引用 1 楼 Daisy__Ben 的回复:不太清楚,顶你! 3的函数是在什么类里面哦,你的Sxxx?Dispatch是java的什么类? 显然你java类没有把组件给调起来 最后发现如果ocx接口如果是2个参数以上,才可以调用成功,但是接口是无参数的则调用不成功,无解了。。。不过还好,可以跑起来了。
哦,可能是版本问题吧,试下ATL去写
recluse 2013-03-17
  • 打赏
  • 举报
回复
引用 1 楼 Daisy__Ben 的回复:
不太清楚,顶你! 3的函数是在什么类里面哦,你的Sxxx?Dispatch是java的什么类? 显然你java类没有把组件给调起来
最后发现如果ocx接口如果是2个参数以上,才可以调用成功,但是接口是无参数的则调用不成功,无解了。。。不过还好,可以跑起来了。
Daisy__Ben 2013-03-10
  • 打赏
  • 举报
回复
不太清楚,顶你! 3的函数是在什么类里面哦,你的Sxxx?Dispatch是java的什么类? 显然你java类没有把组件给调起来

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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