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)
希望哪位朋友能给个调用的代码 展开
[out]void ** pphDevice,
[in]int Instance,
[in] CM_DEVICEADDRINFO* pDeviceAddr,[in]int Flag)
希望哪位朋友能给个调用的代码 展开
1个回答
2013-04-01
展开全部
追问
请问你写的这种方式 是使用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就是[][]等
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询