`
skzr.org
  • 浏览: 355160 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

char *的一个bug?有不同顺序时产生

    博客分类:
  • J2EE
阅读更多

Thanks for your help :)

 

windows xp x86, jdk 1.6.20

 

hellojna dll project

hellojna.h

 

extern "C" _declspec(dllexport) int swapvalue(int* a, int* b);
extern "C" _declspec(dllexport) int rf_select1(unsigned char *_Size);
extern "C" _declspec(dllexport) int rf_select2(unsigned char *_Size,long icdev);
extern "C" _declspec(dllexport) int rf_select3(long icdev, unsigned char *_Size);

 

hellojna.cpp

 

#include "stdafx.h"
#include "hellojna.h"

int rf_select1(unsigned char *_Size) {
    _Size[0] = 'a';
    return 12;
}

int rf_select2(unsigned char *_Size, long icdev) {
    _Size[0] = 'a';
    return 12;
}

int rf_select3(long icdev, unsigned char *_Size) {
    _Size[0] = 'a';
    return 12;
}

HelloJna.java

 

public interface HelloJna extends Library {
	HelloJna instance = (HelloJna) Native.loadLibrary("hellojna", HelloJna.class);
	int rf_select1(byte[] abd);
	int rf_select2(byte[] abd, long dev);
	int rf_select3(long dev, byte[] abd);
}

Test.java 

public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		HelloJna jna = HelloJna.instance;

		byte[] buf = new byte[]{'s', 'u', 'p', 'e', 'r', ' ', 'm', 'a', 'n', '\0'};
		int ret = jna.rf_select1(buf);
		System.out.println("buf=" + new String(buf) + ",ret=" + ret);
		
		buf[0] = 'I';
		ret = jna.rf_select2(buf, 77);
		System.out.println("77 buf=" + new String(buf) + ",ret=" + ret);
		
		buf[0] = 'E';
		ret = jna.rf_select3(99, buf);
		System.out.println("99 buf=" + new String(buf) + ",ret=" + ret);
	}

}

console.out:

 

buf=auper man , ret=12
77 buf=auper man ,ret=12

the screen capter: 


why rf_select1 and rf_select2 is right but rf_select3 is error ??

the differences is just the paramters order??

in the rf_select3 _Size is null

 

buf[0] = 'E';
ret = jna.rf_select3(99, buf);

2010-09-15 00:13 add info:

 

I found it's work good when HelloJna.java change rf_select3(long dev, byte[] abd) to rf_select3(NativeLong dev, byte[] abd)

 

public interface HelloJna extends Library {
	HelloJna instance = (HelloJna) Native.loadLibrary("hellojna", HelloJna.class);
	int rf_select1(byte[] abd);
	int rf_select2(byte[] abd, long dev);
	int rf_select3(NativeLong dev, byte[] abd);
}
  • 大小: 119.3 KB
分享到:
评论
2 楼 skzr.org 2012-09-05  
duduli 写道
https://github.com/twall/jna/blob/master/www/Mappings.md
官方文档上写了:long long 类型才对应java的long类型。

莫非是这个问题,看了这个映射表,long long以前好像没有这个东西,不过当时是在32位winxp下开发测试的。
1 楼 duduli 2012-09-04  
https://github.com/twall/jna/blob/master/www/Mappings.md
官方文档上写了:long long 类型才对应java的long类型。

相关推荐

    你必须知道的495个C语言问题

    6.1 我在一个源文件中定义了chara[6],在另一个源文件中声明了externchar*a。为什么不行? 6.2 可是我听说chara[]和char*a是等价的。是这样的吗? 6.3 那么,在C语言中“指针和数组等价”到底是什么意思? 6.4...

    《你必须知道的495个C语言问题》

    4.5 我有一个char *型指针碰巧指向一些int型变量,我想跳过它们。为什么((int *)p)++; 这样的代码不行? 47 4.6 为什么不能对void *指针进行算术操作? 47 4.7 我有些解析外部结构的代码,但是它却崩溃了,显示...

    C语言FAQ 常见问题列表

    o 7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ? o 7.2 可是我听说 char a[ ] 和 char *a 是一样的。 o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? ...

    你必须知道的495个C语言问题(PDF)

    4.3 我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行? . . . . . . . . . . . . . . 17 4.4 我有个函数,它应该接受并初始化一个指针void f(int *ip) f static ...

    数据结构实验报告1-顺序表实现简易的学生信息管理系统(C语言)

    数据结构实验报告1-顺序表实现简易的学生信息管理系统(C语言),包括实验环境,实验的小结,实验的源代码,实验截图等。 说明:仅供参考,如有bug,还请反馈!

    grub4dos-V0.4.6a-2017-02-04更新

    执行时可以不用输入扩展名,比如输入test如果当前路径下有一个test.g4b就会自动使用。 2013-10-17 1.修改代码支持新版HOTKEY。 2013-07-10 1.insmod现在支持长文件名(以前最多11个字符,现在没有限制). 2....

    飞鸽传书(IPMessenger) 源码

    程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里...

    代码语法错误分析工具pclint8.0

    Windows平台下也有好多人都喜欢用SourceInsight编辑C/C++程序,如果将pclint集成到SourceInsight中,那就相当于给SourceInsight增加了一个C/C++编译器,而且它的检查更严格,能发现一些编译器发现不了的问题,可以...

    C#微软培训资料

    一个一 一个可 可个可 可 以互相交换组件的地方 以互相交换组件的地方以互相交换组件的地方 以互相交换组件的地方 比尔 比尔比尔 比尔.盖茨 盖茨盖茨 盖茨 在本章中你将了解 Microsoft.NET ...

    MP3格式解析

    关于曲目的信息如标题、作者等都存放在不同的标签帧中,扩展标签头和标签帧并不是必要的,但每个标签至少要有一个标签帧。标签头和标签帧一起顺序存放在MP3 文件的首部。 标签头 在文件的首部顺序记录10 个字节的ID3...

    快速可靠网络传输协议KCP.zip

    KCP 是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP) 的收发,需要使用者自己定义下层数据包的发送方式...

    编译原理课程设计 MFC实现

    本人修正了小春版不能误识减号后的数为负数的BUG,修正了除法报overflow的BUG。但愿本程序能给迷茫中的编译器制作者一丝帮助。多谢大家的支持,希望本文能成为编译原理实践的经典。 迷若烟雨 版权所有 仅用于...

    新版Android开发教程.rar

    也有分析认为,谷歌并不想做一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...

    C语言深度揭秘

    第一章 关键字...............9 1.1,最宽恒大量的关键字----auto................................11 1.2,最快的关键字---- register..................................... 11 1.2.1,皇帝身边的小太监----寄存器...

    C语言深度解剖(完美版).pdf

    第一章关键字..................................................................................................................................9 1.1,最宽恒大量的关键字----auto............................

    C语言深度解剖_word版

    C语言深度解剖 word版 解开程序员面试笔试的秘密第一章关键字......................................................................................................................9 1.1,最宽恒大量的关键字...

    C语言深度解剖

    第一章 关键字................................................................................................................................... 9 1.1,最宽恒大量的关键字----auto.........................

Global site tag (gtag.js) - Google Analytics