在C++向JAVA提供调用接口时,需要一个指向java class的指针,怎么实现,JNA库中有方法吗

在C++向JAVA提供调用接口时,需要一个指向java class的指针,怎么实现,JNA库中有方法吗,第1张

public interface MyCDll extends Library {

MyCDll INSTANCE = (MyCDll)NativeloadLibrary("MyCDll", MyCDllclass);

public static class CFile extends Structure {

public ByteByReference _ptr = new ByteByReference();

public int _cnt;

public ByteByReference _base = new ByteByReference();

public int _flag;

public int _file;

public int _charbuf;

public int _bufsiz;

public ByteByReference _tmpfname = new ByteByReference();

public static class ByReference extends CFile

implements StructureByReference{}

public static class ByValue extends CFile

implements StructureByValue{}

}

public CFileByReference fopen(byte[] filename,int len1, byte[] model,int len2);

public int fread(byte[] br, int size, int count, CFile f);

public int fclose(CFile br);

}

这是用java模拟的C的File类。java调用需要的写好的dll或so的动态库。动态库中的所有方法都可以用JNA来描述

loadLibrary的第一个参数是一个三元表达式,意思是,如果平台为windows则用msvcrt为参数值,否则用c++为参数值。 第二个参数就是指你要加载的类的文件名。

三个点表示是最后的参数,位置是放在最后的。如果你把Object args放到前面去就会报错,提示你放到最后。

private HWND getHWnd(Component w) {

HWND hwnd = new HWND();

hwndsetPointer(NativegetComponentPointer(w));

return hwnd;

}

你可以去看一下,

\jna\src-full\src\com\sun\jna\examples\WindowUtilsjava

public static void setWindowAlpha(Window w, float alpha) {

getInstance()setWindowAlpha(w, Mathmax(0f, Mathmin(alpha, 1f)));

}

窗体透明, 你跟一下代码, 就知道怎么获取HWND的

应该是keyPadLibrary的定义有问题,最好是把h文件贴上来看看。

不过估计是有些参数是out参数,你用String的话是不对的,最明显的就是出错的这个地方,函数返回的int是表示函数执行结果,那么你要怎么获取加密后的数据呢(这个应该是执行加密吧)

看看其声明,如果参数标记为out的那么是传出参数,也就是用于返回结果的,不过有时in和out是合用的。

这样是不行的啊,你的问题出在C语言端,java统一是utf-8编码,而C语言不是,你这些写写个常量,编译为dll,java调用肯定错的。

你得在c里面返回unnicode码,方法:

用jdk工具,在jdk——home/bin下面有native2asciiexe这个是转码用的工具

双击打开,

输入 北京

得到unicode码 \u00b1\u00b1\u00be\u00a9

应该 reutrn "\u00b1\u00b1\u00be\u00a9"; java再unicode编码处理即可

以上就是关于在C++向JAVA提供调用接口时,需要一个指向java class的指针,怎么实现,JNA库中有方法吗全部的内容,包括:在C++向JAVA提供调用接口时,需要一个指向java class的指针,怎么实现,JNA库中有方法吗、jna中的方法loadLibrary的第一个和第二个参数分别代表什么意思另外Object后面为什么加上三个"."、jna调dll的方法时,参数不对为什么也可以调到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9326333.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存