- 主题:搞了一天jni
看见点曙光了
但是jni有个很笨拙的地方理解不能
已存在的buffer,想直接怼给java用,似乎是没戏。从jni文档所有关于jbyteArray的描述来看,要么申请要么拷贝,跟防贼似的。TMD无语了。
--
FROM 106.121.188.*
DirectByteBuffer
【 在 prc79 (PRC) 的大作中提到: 】
: 看见点曙光了
: 但是jni有个很笨拙的地方理解不能
: 已存在的buffer,想直接怼给java用,似乎是没戏。从jni文档所有关于jbyteArray的描述来看,要么申请要么拷贝,跟防贼似的。TMD无语了。
: ...................
--
FROM 36.170.36.*
1. byte[] 在堆里的地址是不固定的,如果你想直接访问底层地址也不是不行,有个 API 叫 GetPrimitiveAraryCritical
2. C 代码直接写入 byte 数组可能会越界的,这时候有可能会导致 java heap 被写坏
--
FROM 123.58.117.*
动手之前把事情想简单了,原以为1天能基本搞完的事最后花了3天半。
1.寻找返回byte[]的方法,最后按照一楼兄台的方法返回ByteBuffer。
2.最初按照返回int错误码和传对象的方式定义接口。但是后来发现有些对象很难在函数里赋值。又来回换类还是觉得不太好用。最后通通改成返回对象加抛异常的方式。
3.CallXxxMethod系列经常用错函数或者传错object。
4.回调函数又折腾了一番。
5.第三方库没有java接口,重新编译又折腾了好久。UnsatisfiedaLinkerError又折腾了好久。
--
FROM 117.136.0.*
不好意思啊打个岔,借帖问下,
C#里byte[] buf, buf[0]这个首地址我怎么丢给一个指针来着,
n年不写忘光了,c/pascal里多省事啊,压根没这个问题。
【 在 prc79 (PRC) 的大作中提到: 】
: 动手之前把事情想简单了,原以为1天能基本搞完的事最后花了3天半。
: 1.寻找返回byte[]的方法,最后按照一楼兄台的方法返回ByteBuffer。
: 2.最初按照返回int错误码和传对象的方式定义接口。但是后来发现有些对象很难在函数里赋值。又来回换类还是觉得不太好用。最后通通改成返回对象加抛异常的方式。
: ...................
--
FROM 115.192.164.*
直接赋值不就行了?
【 在 vmx 的大作中提到: 】
: 不好意思啊打个岔,借帖问下,
: C#里byte[] buf, buf[0]这个首地址我怎么丢给一个指针来着,
: n年不写忘光了,c/pascal里多省事啊,压根没这个问题。
: ...................
--
FROM 123.58.117.*
这种东西还是在线等挺急的管用
【 在 prc79 的大作中提到: 】
: 动手之前把事情想简单了,原以为1天能基本搞完的事最后花了3天半。
: 1.寻找返回byte[]的方法,最后按照一楼兄台的方法返回ByteBuffer。
: 2.最初按照返回int错误码和传对象的方式定义接口。但是后来发现有些对象很难在函数里赋值。又来回换类还是觉得不太好用。最后通通改成返回对象加抛异常的方式。
: ...................
--
FROM 123.58.117.*
不让啊,又不是c,你赋值一个冰箱进去都没人管。
【 在 zli07 (Anonymous) 的大作中提到: 】
: 直接赋值不就行了?
--
FROM 115.192.164.*
[DllImport("abc.dll")]
public static extern ushort abcd(byte[] buffer);
byte[] buffer =new byte[1024];
abcd(buffer);
【 在 vmx 的大作中提到: 】
: 不好意思啊打个岔,借帖问下,
: C#里byte[] buf, buf[0]这个首地址我怎么丢给一个指针来着,
: n年不写忘光了,c/pascal里多省事啊,压根没这个问题。
: ...................
--
FROM 122.70.148.*
嗯,我那天偷懒是在import的时候把指针改成数组了,反正对面又不校验。
不过这样浑身难受。
【 在 youngbug (詹天佐) 的大作中提到: 】
: [DllImport("abc.dll")]
: public static extern ushort abcd(byte[] buffer);
: byte[] buffer =new byte[1024];
: ...................
--
FROM 115.192.164.*