java jnative 调用 dll,有如下函数,请问该怎么在java中调用?

intCMAPICM_OpenDevice([out]void**pphDevice,[in]intInstance,[in]CM_DEVICEADDRINFO*pDev... int CMAPI CM_OpenDevice(
[out]void ** pphDevice,
[in]int Instance,
[in] CM_DEVICEADDRINFO* pDeviceAddr,[in]int Flag)
希望哪位朋友能给个调用的代码
展开
 我来答
匿名用户
2013-04-01
展开全部

下面这个是文件:


写文件名的时候把前面的"lib"去掉,把后缀也去掉。这个SO文件是linux中的,dll是windows中的,应该是一样的,这个是我原来写过的代码。照着上面的方法写应该没问题,希望能帮到你。

追问
请问你写的这种方式 是使用jnative吗?没太看明白你的写法,如果可以的话 能发个完整点的吗 这是我邮箱:82215617@qq.com  谢谢。。
追答
用的JNA调用动态库。应该是你所说的。这个代码我真的不方便发过去,非常抱歉。上面写得很清楚了
public class 类名(暂时写为B){
public interface 这里写个名字(暂时写为A) extends Library{
A INSTATANCE = (A) Native.loadLibrary("dll的名字",A.class);
//下面这个是C++的方法。

int CMAPI CM_OpenDevice([out]void ** pphDevice,
[in]int Instance,
[in] CM_DEVICEADDRINFO* pDeviceAddr,[in]int Flag);
}
//main函数里面调用下面这个方法就相当于调用了C++的那个方法

public methodName (int CMAPI CM_OpenDevice([out]void ** pphDevice,
[in]int Instance,
[in] CM_DEVICEADDRINFO* pDeviceAddr,[in]int Flag);
){
return A.INSTANCE.CM_OpenDevice(pphDevice,Instance,pDeviceAddr,Flag);

}

....main(){
B b = new B();

b.methodName;

}

}

大致写了下。就是这样。IN代表输入参数,OUT代表输出参数。调用方法之前把所有的参数都定义好,比如你定义了String a = "";如果这个是输出参数的话,调用完这个方法,a的值就自动就了。是方法里面给赋的值。
假如你DDL的文件名是libABC.DLL,上面写这个名字的时候要写ABC,不要前面的LIB,也不要后面的,DLL
还有就是C++和JAVA类型对应的关系。在网上应该可以找到,比如C++是**,JAVA就是[][]等
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式