JNI 中内存管理的问题

gflei 2002-03-22 11:30:15
在JAVA中,我所知道的是,不能对内存直接操作,是由虚拟机来管理的。
但现在我有一件苦差事,让我用JNI做一些东西,我感到用JNI是没办法的办法了

现在所作的工作是,用java组织起一个c程序,想起来应该不难,不就是相当于用java写个main函数嘛!
但现在的问题是,要调用的方法全部是c函数,而那些c函数到处都是指针,这样直接操作内存,java允许吗?(我想应该可以吧,毕竟是调用JNI嘛,不过这也是我不敢肯定的地方)
在c中操作内存是很灵活的,但java中好像是不允许的。那我这样写出来的程序能运行吗?那c函数中的内存操作是否受到java虚拟机的管理呢?

晕啊~~~,哪位高手帮帮忙,谢谢!
...全文
255 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gflei 2002-03-26
  • 打赏
  • 举报
回复
啊?这么。。。
说真的,我对java可以说根本不熟。至于通信协议那更不知怎么回事。

我想这样做下来,会不会太复杂了?

完全用java写客户端,我想用的时间太长这是其一,
其二,要java和c之间通信,用socket

但是现在遇到的问题是,有些情况还不清楚,比如java-c之间的socket通信是否那么方便?

java中的一些类型和c中的一些类型长度不一,现在要求的是一次传出一定格式的内存区域(根据我现在有的已经用c写好的客户端程序得知)。
有没有什么好办法?
GJA106 2002-03-26
  • 打赏
  • 举报
回复
必需转换出来,比如lxk 结构有15个成员,但现在我只需要其中的3个传给java,那你必需从lxk 结构中取出这个3个成员值,转换成字节数组,然后一次性传给java。
如果有太多类似的东西你可以作个c(c++)2java通信协议。
ChDw 2002-03-25
  • 打赏
  • 举报
回复
你在C里面的函数当然都是指针啦。但是你在JNI中就是C语言了,你要传递什么参数给C的函数就直接用嘛!

你可以通过JNI提供的方法 env->getString...之类的从函数的参数中得到一个
char*就可以啦,我还是没有搞懂你要完成的东西,你举个例子吧
gflei 2002-03-25
  • 打赏
  • 举报
回复
c函数中的形参,现在形参是指针类型。

在java中怎么处理?
gflei 2002-03-25
  • 打赏
  • 举报
回复
就是c语言中,函数中的形参。
现在问题是,许多形参都是指针,不知用java该怎么处理
gflei 2002-03-25
  • 打赏
  • 举报
回复
例如在此中有如下函数:

void weo(SLKDF *sf, int *lk) {
......
}

SLKDF是结构类型,


还有另外一个c函数:

void dwl(SLKDF *sf,....) {
......
}

都是对结构的修改,包扩开辟的空间加大之类的

原先在c中的main函数形如:
main() {
SLKDF *lxk =malloc(SLKDF);
dwl(lxk,....);
weo(lxk,....);
write( x,lxk, x); /* socket通信,要用到lxk */
...
}


现在用java怎么实现?
最终达到的目的是,既把实参传递进去,又能把其中改变放映出来(即指针所能达到的目的)。
谢谢!
gflei 2002-03-22
  • 打赏
  • 举报
回复
to: ChDw
请问,那行参中的指针变量你怎么处理?因为java中并没有指针?
ChDw 2002-03-22
  • 打赏
  • 举报
回复
JNI里面使用指针应该没有什么问题,我一般的操作都没有问题。

但是你还是在JVM的环境中,好像对内存的申请有一定限制,我写的一个dll中
就出现了初始化一个_variant_t的时候
_variant_t t = _variant_t(str);//str长度有200k左右
出现了
#
# An EXCEPTION_STACK_OVERFLOW exception has been detected in native code outside the VM.
# Program counter=0x8f84c37
#

ChDw 2002-03-22
  • 打赏
  • 举报
回复
什么叫行参中的指针?你在你的JNI函数中为什么要用什么行参?

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧