`
ostrichmyself
  • 浏览: 38812 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JNI Basic

阅读更多
JNI用法总结
Java侧代码就不要说什么了, 很简单:
1.参数传递
  参数如何从Java代码传递给C代码的,这里仅仅牵涉到几种基本类型:
  jstring, jboolean, jobject,jint,jdouble, 比较简单

2.参数转化
  传递过来j-参数,怎么像使用C代码一样使用?这里就有类型转化的问题。
  a>基本类型可以直接使用, 如double和jdouble可以互用。
  b> java对象使用
     对象有String对象和通用的Object对象。 处理的方式有点不同。
     不要再C/C++中调用Java的方法, C/C++处理完之后, 将数据对象传出就OK
     b1>String对象
        GetStringUTFChars取得从Java传入过来的String对象
        ReleaseStringUTFChars 用完之后需要释放
     b2>Object对象
        先得到对象的类句柄:
        jclass objectClass = (env)->FindClass("com/ostrichmyself/jni/Structure");
        然后取该类中, 需要的域句柄:
        jfieldID str = (env)->GetFieldID(objectClass,"nameString","Ljava/lang/String;");
jfieldID ival = (env)->GetFieldID(objectClass,"number","I");
        传入的jobject对象, 直接对各个域赋值。
        (env)->SetObjectField(theObjet,str,(env)->NewStringUTF("my name is D:"));
(env)->SetShortField(theObjet,ival,10);
        如果没有传入对象,而是新生成对象,则可以通过
        jobject myNewObjet = env->AllocObject(objectClass);

3.Java数组的处理
        用GetObjectArrayElement取传入的数组
        用NewObjectArray 构造一个数组

4.资源释放原则
   a1>C/C++ new的对象或者Malloc的对象,当然要由C/C++去释放
   a2>通过JNIEnv的方法new的对象, 如果不需要给Java使用,则必须释放
   a3>通过GetStringUTFChars转化从Java得到的String对象到UTF,需要开辟内存,使用完Char*时,
      务必释放内存,方法是:ReleaseStringUTFChars


基本涵盖了Java调用C++/C的语法,没有研究C调用Java,是觉得没有必要,c调用Java,说明对Java和C
的优势不清楚。
分享到:
评论
1 楼 ostrichmyself 2009-09-21  
源代码在CSDN中上传:对上面的几个部分都有介绍:

http://download.csdn.net/source/1678903

相关推荐

    BasicExcel_syllable62t_读取excel_basicexcel_

    另一个是`Apache POI`,虽然它是为Java设计的,但通过`JNA`(Java Native Access)或`JNI`(Java Native Interface)可以在C++中使用。 在"BasicExcel.cpp"文件中,我们可能会看到以下关键步骤: 1. **库的引入**...

    Php+com_Java+JNI

    首先,需要创建一个支持COM的DLL,这个DLL通常由C++或Visual Basic等支持COM的语言编写。然后,在PHP脚本中,可以使用`com_create_guid`函数生成一个唯一的类ID,接着使用`com_load`或`com_get_active_object`函数...

    sbt-jni:带有jni源码的项目的Sbt插件

    有关示例项目,请参见src/sbt-test/sbt-jni/basic 。安装resolvers + = Resolver .url( " joprice-sbt-plugins " , url( " http://dl.bintray.com/content/joprice/sbt-plugins " ))( Resolver .ivyStylePatterns)...

    basicjava_pdf

    - JNI(Java Native Interface):Java与本地代码交互。 - 设计模式:单例、工厂、观察者、装饰者、适配器等常见设计模式的应用。 总的来说,这个"basicjava_pdf"的压缩包提供了从入门到进阶的全面Java学习资源,...

    excel文件处理,BasicExcel处理算法

    在实现BasicExcel库时,开发者可能会利用开源库如libxlsxwriter、libxl或者Apache POI(Java库,但可以通过JNI在C++中调用)来简化底层的文件操作。这些库已经处理了Excel文件的复杂格式,使得开发者可以专注于应用...

    instantclient-basic-win32-10.2.0.4第二部分

    JDBC驱动通过JNI(Java Native Interface)调用oci.dll中的函数,实现与Oracle数据库的通信。 6. cx_Oracle.pyd:Python的Oracle数据库驱动,对应于cx_Oracle模块,允许Python开发者使用Python语言直接访问Oracle...

    socketcan-isobus-java:用于 Linux 内核 SocketCAN ISOBUS 模块的 JAVA JNI 库

    ISOBUS协议栈则是在CAN基础之上,定义了用于农业和工程设备的数据交换标准,包括基本服务(Basic Services, BS)、应用服务(Application Services, AS)和终端节点服务(Terminal Device Services, TDS)。...

    SCJP.basic1.rar_scjp

    "SCJP.basic1.rar_scjp"是一个压缩包文件,包含了针对SCJP认证的基础学习资料,适合对Java编程感兴趣或准备参加SCJP考试的学习者。 在"SCJP認證課程 基礎篇(一)"中,我们可以期待学习以下几个核心的Java知识点: 1...

    使用OSS_tool解析OER编码

    OER是3GPP和其他组织推荐的一种更高效、节省空间的编码规则,相对于基本的BER(Basic Encoding Rules)和DER(Distinguished Encoding Rules),它更适合有限带宽和资源受限的环境。 接下来,JNI是Java平台的一部分...

    java调用dll

    除了调用C/C++的DLL,Java还可以通过Jacob库调用VB(Visual Basic)编写的DLL,即Com组件。Jacob是一个开源库,提供了一种简单的方法来从Java调用COM对象。 ##### 1. 准备Jacob库 下载Jacob的最新版本,通常包括`...

    java调用dll和ocx的开源控件

    Jacob是一个Java和COM(Component Object Model)之间桥梁的开源库,它允许Java代码直接调用DLL和OCX控件,这些控件通常是由Visual Basic (VB)或Visual C++ (VC)等编程语言开发的。 **JNI基础** JNI是Java平台提供...

    Gwt-Windows.rar_gwt

    在GWT应用中,可能会通过Java Native Interface (JNI) 来调用这样的类,从而在JavaScript中使用Windows API。 2. `VB程序太平洋.EXE`: 这可能是一个Visual Basic编译后的可执行文件,可能是一个配套的示例程序,...

    加密狗 U盾 身份验证 JAVA C++ PB VB DELPHI 例子程序

    4. **Visual Basic (VB)**:VB6和.NET版本都有内置的加密和解密功能,但可能需要第三方库来处理硬件级别的加密狗。例如,可以使用ActiveX控件或.NET的CryptoAPI,通过编写VB代码来与加密狗通信。 5. **DELPHI**:...

    视展LED通讯卡二次开发包

    开发者可以学习如何通过Java的JNI(Java Native Interface)或其他库来控制LED通讯卡。 通过这些示例,开发者可以了解如何使用不同的编程语言与视展LED通讯卡进行通信,实现对LED显示屏的控制,包括文本上传、动态...

    B4A开发实例及对应源码

    此外,"NativeObject"涉及的是B4A的原生对象功能,它可以让你直接访问Android的JNI(Java Native Interface),实现更底层的系统调用,提高性能或者使用特定的硬件功能。 **五、源码分析** 提供的源码文件"Booklets...

    海康工业相机开发DEMO

    本文将详细介绍如何利用不同编程语言进行海康工业相机的开发,包括VC(Visual C++)、VB(Visual Basic)、C#、VS(Visual Studio)、PYTHON、DELPHI、JAVA以及OPENCV和LABVIEW。 1. **VC(Visual C++)**:VC++ 是...

    mscomm控件用法.doc

    在命令行中输入`regsvr32 mscomm32.ocx`,这将注册MSComm控件,使其可在Visual Basic、Delphi等开发环境中使用。在Delphi中,可以通过Components->Install Component菜单选项,导入Active X Control,选择Microsoft ...

    TrainsProtocolJava

    火车协议Java 这是由 Michel Simatic 设计的用于火车协议的 Java 接口。 它使用 JNI 从的调用本机函数(阅读)。... 但是,除了测试/集成中的 basicTest 之外,其他测试目前无法在 Mac OS X 上运行。

    GoDEX标签打印机开发C# Java VB C++ 实例代码

    在Java中与GoDEX打印机通信,开发者可能需要用到Java的JNI(Java Native Interface)来调用C/C++编写的库,或者是Java的Socket编程来直接与打印机建立网络连接,实现数据传输。 VB,即Visual Basic,是微软的一种...

Global site tag (gtag.js) - Google Analytics