我不太熟悉C,但我需要在我的

java代码中使用C库.我已经创建了DLL并且能够很好地访问它,但我试图从C代码返回一个int数组到java代码.

在C中,我认为你可以简单地返回一个指向数组的指针,但是它在我的Java代码中没有像我期望的那样工作.这是C代码:

int * getConusXY(double latitude, double longitude) {

maparam stcprm;

double reflat = 25, reflon = -95,

lat1 = 20.191999, lon1 = -121.54001,

x1 = 0, y1 = 0, x2 = 1073, y2 = 689,

gsize = 5.079, scaLat = 25, scaLon = -95, orient = 0;

double x, y;

int* xy;

xy = malloc(2 * sizeof *xy);

stlmbr(&stcprm, reflat, reflon);

stcm1p(&stcprm, x1, y1, lat1, lon1, scaLat, scaLon, gsize, orient);

cll2xy(&stcprm, latitude, longitude, &x, &y);

xy[0] = (int) x;

xy[1] = (int) y;

return xy;

}

如果我在C中测试这个

int* xy = getConusXY(33.92, -84.33);

cout << xy[0] << " " << xy[1] << endl;

然后它工作正常,我得到的值739,255像预期的那样.

我尝试在Java中使用它与JNA包这样(但这给了我739,-16777214):

public class DmapFDllLibrary {

interface DmapFLibrary extends Library {

DmapFLibrary INSTANCE = (DmapFLibrary) Native.loadLibrary("DmapFDll",

DmapFLibrary.class);

IntByReference getConusXY(double latitude, double longitude);

}

public static void main(String... strings) {

IntByReference xy_ref = DmapFLibrary.INSTANCE.getConusXY(33.92, -84.33);

Pointer p = xy_ref.getPointer();

System.out.println(p.getInt(0) + " " + p.getInt(1));

}

}

在JNA文档中,它表示原始数组(如int * buf)将映射到Java中的int [] buf,但是当我尝试将返回类型从IntByReference更改为int []时,我得到一个illegalArgumentException.

我不知道我是否正确地从C返回数组,或者我是不是在Java中正确访问它.任何帮助,将不胜感激.

c ref java_使用JNA将C数组返回给Java相关推荐

  1. java字符串拆分成数组_用Java实现JVM第八章《数组和字符串》

    小傅哥 | https://bugstack.cn 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用J ...

  2. c++ new 数组_用Java实现JVM第八章《数组和字符串》

    案例介绍 本章主要介绍如何实现让虚拟机处理数组和字符串,在虚拟机功能增强后,我们可以执行数组类型计算和输出字符串.本章需要新增实现数组指令:newarray.anewarray.arraylength ...

  3. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  4. Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找

    ylbtech-Java-Runoob-高级教程-实例-数组:01. Java 实例 – 数组排序及元素查找 1.返回顶部 1. Java 实例 - 数组排序及元素查找  Java 实例 以下实例演示 ...

  5. java如何给数组倒置_数组元素倒置-Java

    导读热词 通过两个嵌套循环,实现将数组中的元素倒置.Java实现如下: package test; import java.util.Scanner; public class test15 { /* ...

  6. Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素-un

    ylbtech-Java-Runoob-高级教程-实例-数组:10. Java 实例 – 查找数组中的重复元素 1.返回顶部 1. Java 实例 - 查找数组中的重复元素  Java 实例 以下实例 ...

  7. 数组的升序 java

    数组的升序 java import java.util.Arrays;public class testone {public static void main(String[] args) {int ...

  8. 数组的遍历 java

    数组的遍历 java public class testone {public static void main(String[] args) {int[] array = {1, 2, 3, 4, ...

  9. android js交互 数组,Android WebView —— Java 与 JavaScript 交互总结

    相比于 Native App 和 Web App,Hybrid App 凭借其迭代灵活.控制自如.多端同步的优势在应用市场上越发显得优胜,主要得力于,其将变更频繁的部分产品功能使用 H5 开发并在客户 ...

最新文章

  1. 让你的输入框使用Google云语音输入技术
  2. C/C++ sizeof函数解析——解决sizeof求结构体大小的问题
  3. 【2556】传说中的数据结构 sdutOJ
  4. java - 朴素贝叶斯
  5. linux 磁盘挂载sde,linux lvm挂载新的硬盘并且扩容
  6. hdoj--1716--排列2(暴力水题)
  7. Tips--git bash管理本地文档的常用命令
  8. HAOI2011 Problem b 洛谷P2522
  9. 由于Web服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面(http error 404.2、iis、0x800704ec)...
  10. 1037u处理器搭载文件服务器,悦升IVB 赛扬1037U工控主板 满足多行业需求
  11. 黑科技 未来人们可用身体这7个部位来控制设备
  12. 牛头刨床设计matlab生成图片,牛头刨床matlab程序---机械原理课程设计
  13. 基于ssm柴犬主题咖啡厅系统
  14. 关于library cache lock
  15. 无线测温系统在高低压开关柜内的运行---安科瑞 顾城
  16. 斗兽棋在线游戏HTML5小游戏,js --斗兽棋游戏
  17. 高德地图API开发应用-----地图显示+定位+marker
  18. hdu 6441 (费马大定理+勾股数 数学)
  19. 等保三级,多级等保认证的一点了解
  20. 用最通俗的语言讲一讲,什么是阻抗匹配?

热门文章

  1. 两种电致发光器件EQE测量方法(光分布法和积分球法)
  2. springboot中怎么进行统一日志处理?
  3. 雷电模拟器桥接模式不显示网卡,4版本不能设置代理
  4. rails开发利器:视频播放插件plugin(如何开发一个简单的插件)
  5. linux 的常用命令---------第十阶段(虚拟机三种网络模式)
  6. 云服务器怎么换ip云服务器,云服务器换ip难不难?云服务器换IP的步骤
  7. javaEE核心框架之 Mybatis ( 一 )
  8. Win2003合并磁盘分区
  9. 大华摄像头网页端控制+web串口(适用任何浏览器,不能用来打我)通讯合集
  10. 浏览器:免费小说的“下一站”