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
即可输出相应结果。
分享到:
相关推荐
3. **混编**: 混编指的是将JavaScript代码与原生应用(Java或Swift/Objective-C)代码相结合,使得网页内容可以调用原生功能,反之亦然。 ### 框架与实践 在“WebViewJavascriptBridge-master”这个压缩包中,可能...
* 软件开发:Makefile可以用于编译各种语言的源代码,例如C、C++、Java等。 * 嵌入式系统:Makefile可以用于编译嵌入式系统的固件。 * 数据分析:Makefile可以用于编译数据分析工具和算法。 Makefile是一种功能强大...
Cocos2d-x与Android交互(c++与java互调),与IOS交互(c++与objective c混编) 具体的代码请下载这个文件,里面有更详细的jni使用方法,包括传递基本数据类型,返回基本数据类型的值,及类型的转换。
6. **编译和测试**:将VC++项目编译成可执行文件,运行并测试混编程序的功能和性能。 通过这种方式,开发者可以充分利用MATLAB的强大计算能力和VC++的系统级编程优势,创建出高效且功能丰富的应用程序。这种混编...
### Matlab与C#-.NET混编技术概览 #### 一、Matlab概述 ##### 1.1 Matlab简介 **Matlab**(Matrix Laboratory),即矩阵实验室,是一款由美国MathWorks公司开发的强大数学软件。自1984年首次发布以来,Matlab经过...
在IT领域,跨语言通信是常见的需求之一。本示例"jni_VC2Java"着重讲解如何从Visual...这个过程涉及到了Java和C++的混编,需要对两种语言都有一定的掌握。同时,正确配置工程文件和管理依赖关系也是成功实现调用的关键。
HelloNative.java 准备调用C函数的java文件 HelloNative.lib 用VC编译生成的静态库文件 HelloNative.obj 用VB编译生成的目标文件 HelloNativeTest.java 测试本地化是否成功的类文件 instanceVar.java 定义一个...
10. **Objective-C++**:Objective-C与C++可以混编,这使得引入C++库或利用C++的强大功能成为可能,但需要注意两者的兼容性问题。 总的来说,从Java到Objective-C的迁移需要对这两种语言的异同有深入理解,特别是...
JSP 是一种基于 Servlet 的技术,它可以将 HTML 和 Java 代码混编,生成动态网页。Servlet 是一种 Java 类,可以处理 HTTP 请求和响应。JSP 和 Servlet 的主要区别在于,JSP 编译后是 Servlet 的一种实现,而不是 ...
C 和 C++ 不支持字符串变量,在 C 和 C++ 程序中使用 Null 终止符代表字符串的结束,在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,这些类对象是 Java 语言的核心,用类对象实现字符串有以下几个...
- 熟悉Kotlin与Java的互操作性,了解混编项目的工作原理。 - 实践并理解JNI的使用场景和基本操作。 总之,"火山-江之鱼调用安卓、java实例"是一个深入学习安卓平台Java编程的好材料,涵盖了从基础到进阶的多个知识...
8. 字符串:C和C++不支持字符串变量,在C和C++程序中使用Null终止符代表字符串的结束,在JAVA中字符串是用类对象(String和StringBuffer)来实现的,这些类对象是JAVA语言的核心,用类对象实现字符串有以下几个优点...
通 过 颁发 许 可 证 的 办 法 来 允 许 各 家 公 司 把Java虚 拟 机 和 Java的Applets类库 嵌 入 他 们 开 发 的 操 作 系 统 ,这 样 各 类 开 发 人 员 就 能更 容易 地 选 择 多种 平 台 来 使 用 Java语 言 编 ...
Java编写的山寨QQ,多人聊天+用户在线 21个目标文件 摘要:JAVA源码,媒体网络,山寨QQ,Java聊天程序 Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证...
它定义了一套标准的接口,让开发者可以编写混编程序,充分利用本地库资源。 十、模块系统(Java 9及以上) Java 9引入了模块系统,旨在提高大型应用的可维护性和性能。模块定义了软件的内部结构和对外接口,通过`...
虽然iOS应用通常使用Swift或Objective-C开发,但对于熟悉Java的开发者,也有一些框架和工具,如React Native和Flutter,可以让开发者使用Java语言进行跨平台开发,实现iOS应用的创建。 这个压缩包可能包含了各种...
答案:c) 使用列表标签图文混编(这是错误的,HTML列表标签不能直接混编图片)。 11. Java代码输出:这段代码会先自增i,然后判断++i是否小于1,由于i初始为0,自增后i等于1,所以条件不满足,不会有输出。答案:b)...
它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它...