有与项目组需要用到C++的一个模块, 需要将一个2维数组传到dll 里面 ,返回一个字符串, 恶心了1天终于完成了, 记录一下,同时也希望能给你带来帮助.

java 代码如下,

package test;

import java.util.Arrays;

import com.sun.jna.Library;
import com.sun.jna.Memory;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference; /**
*
*
* @author mjorcen
* @email mjorcen@gmail.com
* @dateTime Aug 25, 2014 5:04:25 PM
* @version 1
*/
public class Project1Service { public interface Project1 extends Library {
/**
* 当前路径是在项目下,而不是bin输出目录下。
*/
Project1 INSTANCE = (Project1) Native.loadLibrary("Project1",
Project1.class); public Integer sum(Integer i1, Integer i2); public Integer test(int[] is, char[] cs); public Integer sort(int[] is, Integer count); public Integer sort2(Pointer[] is, int count, char[] cs); } /**
*
*/
public Project1Service() {
// TODO Auto-generated constructor stub
} /**
* @param args
*/
public static void main(String[] args) {
try { sort2();
} catch (Throwable e) {
e.printStackTrace();
}
// TODO Auto-generated method stub // sum_fun();
// sort();
// test();
} /**
*
*
* @author mjorcen
* @email mjorcen@gmail.com
* @dateTime Aug 25, 2014 9:26:54 PM
* @version 1
*/
private static void sort2() { char[] cs = { '0', '0', '0', '0', '0', '0', '0', '0', '0' };
Pointer[] byReferences = new Pointer[10];
for (int i = 0; i < 10; i++) {
PointerByReference byReference = new PointerByReference();
Memory mymem = new Memory(4 * 2);
// mymem.read(0, new int[] { 1, 2 }, 0, 2);
mymem.setInt(4, 20);
mymem.setInt(0, 10);
byReference.setPointer(mymem);
byReferences[i] = byReference.getPointer();
}
Project1.INSTANCE.sort2(byReferences, 10, cs);
System.out.println(Arrays.toString(cs)); } /**
*
*
* @author mjorcen
* @email mjorcen@gmail.com
* @dateTime Aug 25, 2014 9:26:54 PM
* @version 1
*/
private static void sort2_2() {
int[][] is = { { 12, 12 }, { 12, 12 }, { 12, 12 }, { 12, 12 },
{ 12, 12 }, { 12, 12 }, { 12, 12 }, { 12, 12 }, { 12, 12 },
{ 12, 12 } };
char[] cs = { '0', '0', '0', '0', '0', '0', '0', '0', '0' }; PointerByReference byReference = new PointerByReference();
Memory mymem = new Memory(4 * 2 * 10);
for (int i = 0; i < 10; i++) {
mymem.read(i, new int[] { 1, 2 }, 0, 2);
}
byReference.setPointer(mymem);
// Project1.INSTANCE.sort2(byReference.getPointer(), 10, cs);
System.out.println(Arrays.toString(cs)); } /**
*
*
* @author mjorcen
* @email mjorcen@gmail.com
* @dateTime Aug 25, 2014 7:43:45 PM
* @version 1
*/
private static void test() {
int[] is = { 12, 30, 39, 4, 5, 6, 10, 7, 8, 9 };
char[] cs = { '0', '0', '0', '0', '0', '0', '0', '0', '0' };
System.out.println(is);
String str = "str";
Integer count = Project1.INSTANCE.test(is, cs);
System.out.println(Arrays.toString(is));
System.out.println(Arrays.toString(cs));
System.out.println("str =" + str);
System.out.println(is.length);
} /**
*
*
* @author mjorcen
* @email mjorcen@gmail.com
* @dateTime Aug 25, 2014 6:44:21 PM
* @version 1
*/
private static void sort() {
int[] is = { 1, 2, 3, 4, 5, 6, 10, 7, 8, 9 };
System.out.println(Arrays.toString(is));
Integer count = Project1.INSTANCE.sort(is, is.length);
System.out.println(is.length); } private static void sum_fun() {
Integer count = Project1.INSTANCE.sum(1, 2);
System.out.println("count = " + count);
} }

ddl 代码如下

h>

#pragma once
extern "C"_declspec(dllexport) void sort(int *p, int count);
extern "C"_declspec(dllexport) int test(int *p, char* count);
extern "C"_declspec(dllexport) int sum(int i1, int i2);
extern "C"_declspec(dllexport) void sort2(int **p, int count, char* chars);
#include <stdio.h>
#include <exception> // std::exception
#include <iostream> // std::cerr
class j_test
{ public:
j_test();
~j_test();
void sort(int *p, int count);
void sort2(int **p, int count, char* chars);
int sum(int i1, int i2);
int test(int *p, char* count);
};

cpp>

#include "j_test.h"

j_test::j_test()
{
} j_test::~j_test()
{
} void sort(int *p, int count)
{
int temp = ;
for (int i = ; i<count; i++)
{
for (int j = count - ; j >= i; j--)
{
if (p[j]>p[j - ])
{
temp = p[j];
p[j] = p[j - ];
p[j - ] = temp;
}
}
}
} int test(int *p, char* count){
int conversion = ;
count[ * conversion] = 'm';
count[ * conversion] = 'j';
count[ * conversion] = 'o';
count[ * conversion] = 'r';
count[ * conversion] = 'c';
count[ * conversion] = 'e';
count[ * conversion] = 'n';
printf("char size is d% " , sizeof('m'));
p[] = ;
p[] = ;
return ;
}
int sum(int i1, int i2){ return i1 + i2;
} void sort2(int **p, int count ,char* chars)
{
try{ int conversion = ;
printf("conversion is %d \n", conversion);
printf("**p is %d \n", sizeof(** p));
chars[ * conversion] = 'm';
chars[ * conversion] = 'j';
chars[ * conversion] = 'o'; chars[ * conversion] = 'r';
chars[ * conversion] = 'c';
chars[ * conversion] = 'e'; chars[ * conversion] = 'n'; int *temp ;
for (int i = ; i<count; i++)
{
printf("temp[0] is %d ,temp[1] is %d \n", p[i][], p[i][]);
for (int j = count - ; j >= i; j--)
{ if (p[j][]>p[j - ][])
{
temp = p[j]; p[j] = p[j - ];
p[j - ] = temp; }
}
}
}
catch (std::exception& e)
{
std::cerr << "exception caught: " << e.what() << '\n';
}
}

jna 使用实例,的更多相关文章

  1. JNA入门实例

    JNA(Java Native Access):建立在JNI之上的Java开源框架,SUN主导开发,用来调用C.C++代码,尤其是底层库文件(windows中叫dll文件,linux下是so[shar ...

  2. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  3. JNA的步骤、简单实例以及资料整理

    1.步骤 1.编写dll文件,放入项目的bin目录(在window上是dll文件,在Linux上是so文件,dll和so都是由C程序生成)  2.新建接口继承Library  3.加载对应的dll或者 ...

  4. [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PWideChar

    Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessWide(pvData: P ...

  5. [JNA系列]Java调用Delphi编写的Dll之实例Delphi使用PAnsiChar

    Delphi代码 unit UnitDll; interface uses StrUtils, SysUtils, Dialogs; function DoBusinessAnsi(pvData: P ...

  6. java 用JNA方法调用C++动态链接库

    JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架.非常强大.易用,功能上类似与.NET的P/Invoke.你只 ...

  7. JNA—JNI终结者

    JNA—JNI终结者 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的J ...

  8. JNI的替代者—使用JNA访问Java外部功能接口

    摘自:http://www.cnblogs.com/lanxuezaipiao/p/3635556.html JNI的替代者-使用JNA访问Java外部功能接口 1. JNA简单介绍 先说JNI(Ja ...

  9. java 利用jna调用c#的dll

    一.需求阐述: 如果我们的项目利用c#开发,到了开发后期需要和java组进行合作,其中有一部分业务逻辑利用c#已经code completed,那么我们可能会考虑用java来调用现成的c#dll实现需 ...

随机推荐

  1. Elasticsearch 查询与过滤

    今天在给上级汇报工作的时候,被问到了这个问题,一时也没回到上来. 英文原文: https://www.elastic.co/guide/en/elasticsearch/guide/current/_ ...

  2. WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】

    一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...

  3. 安卓开发错误:The type android.support.v4.app.TaskStackBuilder$SupportParentable cannot be resolved.

    今天在使用低版本下的ActionBar,在继承ActionBarActivity时报了"The type Android.support.v4.app.TaskStackBuilder$Su ...

  4. JavaScript设计模式(一)

    使用JavaScript框架和库过程中, 我遇到过很多感觉上'奇形怪状'的代码. 大多数情况下, 按照惯例编写代码也能够写出很多出色的功能. 但是如果不从根本上理解它们实现的方法, 就没办法完全充分发 ...

  5. Javascript原型钩沉

    写在前面的总结: JS当中创建一个对象有好几种方式,大体上就是以下几种: ①通过var obj ={...} 这种方式一般称为字面量方式,{}直接写需要定义的字段 ②var obj = new Obj ...

  6. ###STL学习--函数对象

    点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的 ...

  7. cocos2d-x实战 C++卷 学习笔记--第7章 动作、特效(一)

    前言: 介绍cocos2d-x中的动作.特效. 动作: 动作(action)包括基本动作和基本动作的组合,这些基本动作有缩放.移动.旋转等,而且这些动作变化的速度也可以设定. 动作类是 Action. ...

  8. FreeMarker语法2

    FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ...

  9. ZOJ 2392 The Counting Problem(模拟)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1368 题目大意:计算从S到T中所有的数,其中0,1,2,3,4,5, ...

  10. VIM 语法检查

    VIM Grammar Check 一.Language Tool Create by Dominique Pellé REFER:LanguageTool wikipedia REFER:Langu ...