`
hongyiqiye
  • 浏览: 90196 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

c和java混编

 
阅读更多

java中调用c语言

首先编写Main.java

public class Main
{
 public native static int getStrNum(byte str[], int strLen);
}

在命令行中,使用如下命令编译:

javac Main.java
下面的命令将生成Main.h头文件

javah Main

打开vs2008, 新建工程MakeDll(win32 console application),设置项目属性如下:

在project-》MakeDll Properties-》在General选项卡上,选择生成dll文件。

同时需要在项目的c++下general下的Additional include directory下加载jdk安装目录下的include文件夹和该文件夹下的win32

子目录。

将第一步生成的Main.h文件假如到工程中,同时新建一个main.cpp文件,在其中假如如下代码:

#include "Main.h"
#include <string.h>

JNIEXPORT jint JNICALL Java_Main_getStrNum  (JNIEnv *env, jclass cls, jbyteArray str, jint strLen)
{
 jbyte *buffer = (*env).GetByteArrayElements(str, 0);
 buffer[strLen] = ' ';
 jint len = strlen((char*)buffer);
 
 return len;
}
编译即可生成MakeDll.dll文件。

在java源文件中调用该dll文件(注意需要将dll文件和编译的class文件放置在同一个文件夹下面)

java源文件代码如下:

public class Main
{
 static
 {
  System.loadLibrary ("MakeDll");
 }
 
 public native static int getStrNum (byte[] str, int strLen);
 
 public static void main (String[] args)
 {
  Main instance = new Main ();
  String str = new String ("haha");
  int num = instance.getStrNum (str.getBytes (), str.length ());

  System.out.println (num);
 }
}

编译该java源文件,同时执行该文件。

javac Main.java

java Main

即可输出相应结果。

分享到:
评论

相关推荐

    webview与js混编

    3. **混编**: 混编指的是将JavaScript代码与原生应用(Java或Swift/Objective-C)代码相结合,使得网页内容可以调用原生功能,反之亦然。 ### 框架与实践 在“WebViewJavascriptBridge-master”这个压缩包中,可能...

    Makefile万能通用版(C++和C混合编译也适用)

    * 软件开发:Makefile可以用于编译各种语言的源代码,例如C、C++、Java等。 * 嵌入式系统:Makefile可以用于编译嵌入式系统的固件。 * 数据分析:Makefile可以用于编译数据分析工具和算法。 Makefile是一种功能强大...

    Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编)

    Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编) 具体的代码请下载这个文件,里面有更详细的jni使用方法,包括传递基本数据类型,返回基本数据类型的值,及类型的转换。

    Matlab第一个混编例子-基于计算引擎

    6. **编译和测试**:将VC++项目编译成可执行文件,运行并测试混编程序的功能和性能。 通过这种方式,开发者可以充分利用MATLAB的强大计算能力和VC++的系统级编程优势,创建出高效且功能丰富的应用程序。这种混编...

    Matlab与C#-NET混编介绍课件.pdf

    ### Matlab与C#-.NET混编技术概览 #### 一、Matlab概述 ##### 1.1 Matlab简介 **Matlab**(Matrix Laboratory),即矩阵实验室,是一款由美国MathWorks公司开发的强大数学软件。自1984年首次发布以来,Matlab经过...

    vc调用java的示例:jni_VC2Java

    在IT领域,跨语言通信是常见的需求之一。本示例"jni_VC2Java"着重讲解如何从Visual...这个过程涉及到了Java和C++的混编,需要对两种语言都有一定的掌握。同时,正确配置工程文件和管理依赖关系也是成功实现调用的关键。

    Java开发技术大全(500个源代码).

    HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个...

    learn objective-c for java developers

    10. **Objective-C++**:Objective-C与C++可以混编,这使得引入C++库或利用C++的强大功能成为可能,但需要注意两者的兼容性问题。 总的来说,从Java到Objective-C的迁移需要对这两种语言的异同有深入理解,特别是...

    神州数码面试题 (java).doc

    JSP 是一种基于 Servlet 的技术,它可以将 HTML 和 Java 代码混编,生成动态网页。Servlet 是一种 Java 类,可以处理 HTTP 请求和响应。JSP 和 Servlet 的主要区别在于,JSP 编译后是 Servlet 的一种实现,而不是 ...

    java和c++区别

    C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中使用 Null 终止符代表字符串的结束,在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,这些类对象是 Java 语言的核心,用类对象实现字符串有以下几个...

    火山-江之鱼调用安卓、java实例.rar

    - 熟悉Kotlin与Java的互操作性,了解混编项目的工作原理。 - 实践并理解JNI的使用场景和基本操作。 总之,"火山-江之鱼调用安卓、java实例"是一个深入学习安卓平台Java编程的好材料,涵盖了从基础到进阶的多个知识...

    JAVA和C++区别详解.doc

    8. 字符串:C和C++不支持字符串变量,在C和C++程序中使用Null终止符代表字符串的结束,在JAVA中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是JAVA语言的核心,用类对象实现字符串有以下几个优点...

    java基础入门教程

    通 过 颁发 许 可 证 的 办 法 来 允 许 各 家 公 司 把Java虚 拟 机 和 Java的Applets类库 嵌 入 他 们 开 发 的 操 作 系 统 ,这 样 各 类 开 发 人 员 就 能更 容易 地 选 择 多种 平 台 来 使 用 Java语 言 编 ...

    JAVA上百实例源码以及开源项目源代码

    Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...

    Java虚拟机规范(中英)

    它定义了一套标准的接口,让开发者可以编写混编程序,充分利用本地库资源。 十、模块系统(Java 9及以上) Java 9引入了模块系统,旨在提高大型应用的可维护性和性能。模块定义了软件的内部结构和对外接口,通过`...

    存放一些Java、JavaEE、Android和iOS的源码

    虽然iOS应用通常使用Swift或Objective-C开发,但对于熟悉Java的开发者,也有一些框架和工具,如React Native和Flutter,可以让开发者使用Java语言进行跨平台开发,实现iOS应用的创建。 这个压缩包可能包含了各种...

    javau1测试题目1.docx

    答案:c) 使用列表标签图文混编(这是错误的,HTML列表标签不能直接混编图片)。 11. Java代码输出:这段代码会先自增i,然后判断++i是否小于1,由于i初始为0,自增后i等于1,所以条件不满足,不会有输出。答案:b)...

    使用Java和ffmpeg把音频和视频合成视频的操作方法

    它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它...

Global site tag (gtag.js) - Google Analytics