public class test {
public static void main(String[] args) {
int dwMachineNumber;
IntByReference dwYear = new IntByReference();
IntByReference dwMonth = new IntByReference();
IntByReference dwDay = new IntByReference();
IntByReference dwHour = new IntByReference();
IntByReference dwMinute = new IntByReference();
IntByReference dwDayOfWeek = new IntByReference();
boolean result = dmapiINSTANCEGetAllUserID(dwMachineNumber,dwYear,dwMonth,dwDay,dwHour,dwMinute,dwDayOfWeek);
}
}
import comsunjnaLibrary;
import comsunjnaNative;
import comsunjnaStructure;
public interface dmapi extends Library {
dmapi INSTANCE = (dmapi)NativeloadLibrary("dmapi", dmapiclass);
public boolean GetAllUserID (
int dwMachineNumber,
IntByReference dwEnrollNumber,
IntByReference dwEMachineNumber,
IntByReference dwBackupNumber,
IntByReference dwMachinePrivilege,
IntByReference dwEnable
);
}
还有问题上QQ
我感觉你这样设计有问题,JNI中java和C/C++的方法应该是保留java的方法名,当然这个不是重点,重点是你里面的参数显然不一致。ByteByReference是个对象类型,我们无法把它弄成一个指针类型,毕竟java没有指针。我的建议是,pBuffer不要作为参数,用具体的类型。pBuffer作为全局变量在别的地方初始化,这样不影响你在invoke方法里面用pBuffer来获取值。我这只是从你的描述简单的看,具体的需求我也不太清楚你要做什么,个人建议。
解决java调dll报Unable to load library的错误可以尝试以下方法:
载入库文件有两个函数,Systemload 和 SystemloadLibrary。
当使用Systemload时,需要输入文件的全路径,例如:Systemload(“/tmp/testso”);
当使用Systemloadlibrary时是在系统的library 的目录中需找复合条件的库文件,可以使用-Djavalibrarypath=[path]参数,来指定Java程序加载库文件的路径,或者将库文件(so,dll)复制到include的默认路径,Linux一般是/usr/lib目录下,当然你可以编辑/etc/ldsoconfd/下的文件,设定自己的库查找路径ldconfig -v|grep xxx看看有没有你的动态库。
Linux还要注意,使用SystemloadLibrary(name)方法其中参数内容与Windows有区别,Linux中的的库文件名为libnameso,Windows为namedll。
在Windows中尽量使用Windows的C/C++编译器生成dll文件,否则会出现问题。
不过具体问题还要具体对待!
以上就是关于关于jna调用dll的问题全部的内容,包括:关于jna调用dll的问题、想知道java怎么取com.sun.jna.ptr.ByteByReference里面的数据。、如何解决java调dll报Unable to load library的错误等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)