JNIdemo

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

package
com.jni;

public class JNITest {

    static{

        System.loadLibrary("JNI");

    }

    public
native String getCompterName();

    public
native void fastWriteFile(String name, byte[] bytes);

    

    public
static void main(String[] args) {

        JNITest test = new
JNITest();

        String str = test.getCompterName();

        test.fastWriteFile("tst", new
byte[]{});

        System.out.println(str);

    }

}

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

/* DO NOT EDIT THIS FILE - it is machine generated */

#include <jni.h>

/* Header for class com_jni_JNITest */

#ifndef _Included_com_jni_JNITest

#define _Included_com_jni_JNITest

#ifdef __cplusplus

extern
"C" {

#endif

/*

 * Class:     com_jni_JNITest

 * Method:    getCompterName

 * Signature: ()Ljava/lang/String;

 */

JNIEXPORT jstring JNICALL Java_com_jni_JNITest_getCompterName

  (JNIEnv *, jobject);

/*

 * Class:     com_jni_JNITest

 * Method:    fastWriteFile

 * Signature: (Ljava/lang/String;[B)V

 */

JNIEXPORT void
JNICALL Java_com_jni_JNITest_fastWriteFile

  (JNIEnv *, jobject, jstring, jbyteArray);

#ifdef __cplusplus

}

#endif

#endif

//-------------------------------------

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

/* Replace "dll.h" with the name of your header */

#include <stdlib.h>

#include <stdio.h>

#include "dll.h"

#include "windows.h"

#include "tlhelp32.h"

#include "util.h"

 

/*

* Class: com_jni_JNITest

* Method: getCompterName

* Signature: ()Ljava/lang/String;

*/

JNIEXPORT jstring JNICALL Java_com_jni_JNITest_getCompterName

(JNIEnv *env, jobject)

{

char
*res = "test to jstring";

PROCESSENTRY32 pe32;

//在使用这个结构前,先设置它的大小

pe32.dwSize = sizeof(pe32);

//给系统内所有的进程拍个快照

HANDLE
hProcessSnap = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);

if
(hProcessSnap == INVALID_HANDLE_VALUE)

{

res = "CreateToolhelp32Snapshot 调用失败.\n";

}

//遍历进程快照,轮流显示每个进程的信息

BOOL
bMore = ::Process32First(hProcessSnap,&pe32);

while
(bMore)

{

printf("进程名称:%s ID:%u\n",pe32.szExeFile,pe32.th32ProcessID);

bMore = ::Process32Next(hProcessSnap,&pe32);

}

//不要忘记清除掉snapshot对象

::CloseHandle(hProcessSnap);

jstring result = stoJstring(env,res);

return
result;

}

/*

* Class: com_jni_JNITest

* Method: fastWriteFile

* Signature: (Ljava/lang/String;[B)V

*/

JNIEXPORT void
JNICALL Java_com_jni_JNITest_fastWriteFile

(JNIEnv *env, jobject, jstring, jbyteArray)

{

printf("hello jni");

}

  

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

  //-------------------------

#include <stdlib.h> 

#include <stdio.h>

#include "dll.h"

//char* to jstring

jstring stoJstring(JNIEnv* env, const
char* pat)

{

    jclass strClass = env->FindClass("Ljava/lang/String;");

    jmethodID ctorID = env->GetMethodID(strClass, "<init>", "([BLjava/lang/String;)V");

    jbyteArray bytes = env->NewByteArray(strlen(pat));

    env->SetByteArrayRegion(bytes, 0, strlen(pat), (jbyte*)pat);

    jstring encoding = env->NewStringUTF("utf-8");

    

    return
(jstring)env->NewObject(strClass, ctorID, bytes, encoding);

}

char* jstringTostring(JNIEnv* env, jstring jstr)

{

       char* rtn = NULL;

       jclass clsstring = env->FindClass("java/lang/String");

       jstring strencode = env->NewStringUTF("utf-8");

       jmethodID mid = env->GetMethodID(clsstring, "getBytes", "(Ljava/lang/String;)[B");

       jbyteArray barr= (jbyteArray)env->CallObjectMethod(jstr, mid, strencode);

       jsize alen = env->GetArrayLength(barr);

       jbyte* ba = env->GetByteArrayElements(barr, JNI_FALSE);

       if
(alen > 0)

       {

                 rtn = (char*)malloc(alen + 1);

                 memcpy(rtn, ba, alen);

                 rtn[alen] = 0;

       }

       env->ReleaseByteArrayElements(barr, ba, 0);

       return
rtn;

}

 

编译请参考:http://www.cnblogs.com/czpblog/p/3760940.html  

编译后把dll的目录追加到path

JNIdemo,布布扣,bubuko.com

时间: 2024-12-27 23:42:36

JNIdemo的相关文章

2016年最牛逼的分类Android项目源码免费一次性打包下载!

之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被我分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是我一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不要一分钱!最看不起那些挂羊头卖狗的)你可以在本帖里面按Ctrl+F查找你需要的关键字,

Java中JNI的使用详解第一篇:HelloWorld

今天开始研究JNI技术,首先还是老套路,输出一个HelloWorld:具体流程如下:在Java中定义一个方法,在C++中实现这个方法,在方法内部输出"Hello World",然后再回到Java中进行调用.分为以下步骤: 第一步:在Eclipse中建立一个类:JNIDemo 1 package com.jni.demo; 2 public class JNIDemo { 3 //定义一个本地方法 4 public native void sayHello(); 5 public sta

Java 调用 C++ (Java 调用 dll)康哥手把手教你

因为要做点图形处理的项目,需要在Java中调用dll库,所以开发的第一步是研究了一下Java Jni的使用方法.突然发现Android Jni 使用跟这个好像(麻蛋,不就是一样的吗,但是Android中需要使用so动态链接库). 第一步 创建Java工程,命名JniDemo,添加JniDemo.java 第二步 在Java类中添加native方法 /** * @author Baokang */ public class JniDemo{ public native static void se

5.7 NDK开发

JNI开发流程主要分为以下6步: 编写Java源代码 将Java源代码编译成class字节码文件 用javah -jni命令生成.h头文件(-jni参数表示将class中用native声明的函数生成jni规则的函数) 用本地代码实现.h头文件中的函数 将本地代码编译成动态库 (windows: *.dll ,linux/unix: *.so ,mac os x: *.jnilib ) 拷贝动态库至  java.library.path 本地库搜索目录下,并运行Java程序 JNI是Java众多开

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

Android Studio制作.so库实践

前言 因为工作需要可能要用到JNI开发,本篇文章就分享一下我在这方面的实践,以前我们使用Eclipse做NDK开发,非常麻烦,需要配cygwin的编译环境,后面NDK功能完善才逐渐简单点,如果想了解Eclipse如何配置NDK编译环境可以参考我以前发表的旧文: Cocos2d-x 2.2.3 使用NDK配置编译环境 JNI_Android项目中调用.so动态库 Eclipse的如何通过NDK生成so库就不多说了,目前已经不适用于Android开发,建议使用AS进行开发,本篇也是基于AS来进行讲解

转--2014年最新810多套android源码2.46GB免费一次性打包下载

转载自:http://www.eoeandroid.com/thread-497046-1-1.html 感谢该博客主人无私奉献~~ 下面的源码是从今年3月份开始不断整理源码区和其他网站上的安卓例子源码,目前总共有810套左右,根据实现的功能被博主分成了100多个类,总共接近2.5G,还在不断更新.初学者可以快速方便的找到自己想要的例子,大神也可以看一下别人的方法实现.虽然的例子都是博主一个人辛辛苦苦花了很多时间和精力整理的,但是既然这些例子是来自于社区那就让他们免费回归社区吧,(是的!特么的不

Android JNI programming demo with Eclipse

用Eclipse 建立 JNI 的專案, 示範如何在 JAVA 調用 cpp 的函數. 我們將建立一個名稱為 jnidemo的專案, 在主Activity 將調用一個名為libHello.so 的 cpp 函數庫的 getVersion() 的函數, 將其返回字串寫在主Activity 的TextView 上. 首先用Eclipse建立一個新的 Android Activity 專案.  其他選項都用預設值就可以. 1. 稍微修改主活動配置 layout/activity_main.xml, 

一个使用sbt编译的JNI C++ 的模板

假设你须要在Scala或是Java中调用C或C++函数库,就须要使用JNI. 这里就涉及到编译scala ,java 和C(C++)代码,在这里给出一个程序的框架,我们使用sbt 缺省的代码文件夹 文件文件夹src->main--–>java--–>scala--–>c 当中文件夹c存放C++代码 ,java文件夹放置Java代码, scala文件夹放置Scala代码 项目组用来编译的相关文件为build.sbt 和Makefile (它编译放置在c文件夹下的C++文件,注意仅仅能