「java调用c指针」c语言函数指针

博主:adminadmin 2022-12-12 05:09:06 87

今天给各位分享java调用c指针的知识,其中也会对c语言函数指针进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

关于JAVA调用C的DLL库中的函数问题,传入一个含有指针的结构体指针

在java里定义对应的,分配地址空间大小相同的结构体。

java应该也可以定义struct.

比如dword可以定义为long.

把c中的pvoid定义找出来,也定义一个struct.

java可以调用带有指针参数的C函数吗

VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。

从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!

“学习用汇编语言写程序”和“VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。

(Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)

想要从本质上理解C指针,必须学习C和汇编的对应关系。”

不是一回事!

Linux环境下java调用C

你的JNI 写错了吧

java里的 char和 C的char完全不是一回事

java里你要写 stringjava_encryptpswd(string Password, string EncryptedKey );

生成的 C头文件,应该是 jstring java_encryptpswd(JEnvi* pEnvi,jstring Password,jstring EncryptedKey)

我手写的,没查资料,大概是这样。。

然后第一个参数是当前虚拟机事例,里面有很多可用的函数

后面两个是java里字符串结构,在C里面的表示法, 其实它就是指针而已。

然后你可以用pEnvi里的函数,将java的string,转化成 c的string。

然后调用 C的头文件的函数,得到结果,在组装成java的字符串。

比如例子:

我要用C来实现 java的字符串定位。

No.1 定义java的本地接口

public native String NAConvert(String arg1,String arg2);

No.2 生成头文件

JNIEXPORT jstring JNICALL Java_com_test_mainandroid_MainAndroidNative_NAConvert

(JNIEnv *, jobject, jstring, jstring);

No.3 自己创建一个实现文件,实现上面函数

jstring Java_com_test_mainandroid_MainAndroidNative_NAConvert

(JNIEnv* env, jobject obj, jstring arg1, jstring arg2)

{

jsize len = env-GetStringLength(arg1);

jchar* pBuf = new jchar[len+1];

env-GetStringRegion(arg1,0,len,pBuf);

jclass m = env-FindClass("java/lang/String");

jmethodID mid = env-GetMethodID(m,"charAt","(I)C");

jchar c = env-CallCharMethod(arg1,mid,1);

return arg1 ;

}

第一个是虚拟机事例指针,第二个参数是接口方法所在对象的 this。

第三个及以后才是你的接口的参数。

java里传入的所有对象参数,在C里面都是句柄。必须要用第一个参数env才能解析其中含义。

JAVA怎么实现C语言的指针相同功能

我用自己的理解来讲得通俗一点吧

C语言可以用一个指针值指向内存的任何一个空间,当然有很多非法的空间会被检测出来,所有乱用指针,编译器或者系统就会报错。

但JAVA不同,JAVA 通过一个引用,来指向内存的一个空间,换句话说,不是你想指向哪里,就指向哪里,因为你定义个变量时,这个空间由系统分配,同样,你定义一个引用,这个空间同样由系统分配,而我们做的事情只是将这两个由系统分配的空间进行一个指向关联,没有一个随心所欲的内存指向

区别很明显吧,我相信这样解释,连一个没有任何C基础的人都能明白,呵呵,因为这是我第一次做任务来答题,所以详细一点,也啰嗦一点,如果还不明白,我们可以进一步交流。

java调用c指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言函数指针、java调用c指针的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-12,除非注明,否则均为首码项目网原创文章,转载请注明出处。