`

多语言调用之 Java调用C/C++

阅读更多

1.创建一个类com.test.TestCall内容如下  package com.test;

public class TestCall {

public native String getResponse(String request);//传说中的native,调用非java方法
}
 

2.编译得到TestCall.class文件

  命令javah com.test.TestCall(如果不好使,前面执行一句set classpath=.)

  得到com_test_TestCall.h文件,内容如下  /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_test_TestCall */

#ifndef _Included_com_test_TestCall
#define _Included_com_test_TestCall
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_test_TestCall
* Method: getResponse
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

  3.新建C/C++工程,引入com_test_TestCall.h头文件  TestCall.cpp
#include "com_test_TestCall.h"
JNIEXPORT jstring JNICALL Java_com_test_TestCall_getResponse
(JNIEnv *pEnv, jobject obj, jstring jstr)
{
jstring response = pEnv->NewStringUTF("call C:");
jboolean isCpoy;
const jchar *request = pEnv->GetStringChars(jstr,&isCpoy) ;
//todo
pEnv->ReleaseStringChars(jstr,request);
return response;
}

  编译成TestCall.dll

  4.将TestCall.dll放到eclipse工程下(或者运行参数java -Djava.library.path=“dll目录”)

  完整TestCall.java  package com.test;

public class TestCall {

static

{

//dll名字

System.loadLibrary("TestCall");

}

public native String getResponse(String request);

public static void main(String[] args)

{

TestCall call = new TestCall();

String message = call.getResponse("hello");

javax.swing.JOptionPane.showMessageDialog(null, message);

}

}

  5.运行java,弹出对话框就算成功了。

  当然现在有Java Native Access这个开源项目,方便了我们的调用。

  JNA里面不需要按照com_test_XX这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用

分享到:
评论

相关推荐

    eclipse 开发c/c++

    C 和 C++ 语言都是世界上最流行且使用最普遍的编程语言, 因此 Eclipse 平台(Eclipse Platform)提供对 C/C++ 开发的支持一点都不足为奇。 因为 Eclipse 平台只是用于开发者工具的一个框架,它不直接支持 C/C++;它...

    多语言调用WebService技术文档.doc

    内容概要:代码示例 C++调用WebService,Java调用WebService,C#调用WebService,Js调用WebService,VB调用WebService,ASP调用WebService,PHP调用WebService。 适用人群:WebService开发人员 使用场景:跨平台...

    java调用dll

    对硬件的扫描,对图片的扫描,java调用c++开发的dll实现转换调用,能使dll接多个语言

    Java调用Oracle存储过程

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向...

    starcore_for_winuwp.3.5.0.zip

    •集成脚本之间双向调用桥接,任何语言 c/c++, lua, python, java, c#,ruby可以直接存取和调用其它语言中的类,函数,方法,以及模块 •支持丰富的网络功能: tcp/udp, telnet server, http server, soap server. •...

    跨越语言的障碍:C++/CLI 调用 C#

    当然还有其他很多语言。这个只是面临不同项目的选择而已,每种语言都有其擅长的舞台,而万年不变的是数据结构和算法。一家之言,轻喷。下面正题:  跨越语言的障碍:C++/CLI 调用 C#  当C#项目需要引用C++dll的...

    aardio工具解压版

    aardio 是一种动态语言、 但也是一种混合语言,可以罕见的、非常方便的操作静态类型,因此可以直接调用C语言、C++等等静态语言的API接口函数( 不需要像VB那样先声明API ),aardio可以支持非常多的API调用约定,例如 ...

    visual c++考试大纲

    《Viusal C++语言程序设计》考试大纲(2005年3月3日)   本次考试以C语言程序设计为主,作为过渡。   (一)C语言的结构 1.程序的构成,main函数和其他函数。 2.头文件、数据说明、函数的开始和结束标志。 3.源程序...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 301 11.3.2 公共子表达式消除 / 305 11.3.3 数组边界检查消除 / 307 11.3.4 方法内联 / 307 11.3.5 逃逸分析 / 309 11.4 Java与C/C++的编译器对比 / 311 11.5 本章小结 / 313 第五部分 高效并发 第12章 ...

    c#源码转java源码的-CppSharp:将C/C++API粘合到高级语言的工具和库

    c#原始码转Java原始码的CppSharp是一个工具和一组库,可促进在.NET生态系统中使用本机C / C ++代码。 它使用C / C ++头文件和库文件,并生成必要的粘合代码以将本机API作为托管API浮出水面。 此类API可用于在托管...

    SuperDotNetAPI:API方式直接调用C#的DLL,支持多音字转拼音、Gzip解压缩、公式计算(VBA、C++、VB、Delphi甚至java都可以)

    这两年,我在VBA应用方面一直有几大痛点: ...本DLL库可以被C++、VB6、Delphi、VBA等多种语言调用(接口提供VBA示例,其它语言自己写。)。支持32位和64位操作系统。 运行环境:需要.net Framework 4.0或以上,支持XP。

    java开源包1

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

    Unity3D研究之Android实现本地数据共享

    开始本篇文章之前我先为大家简单的介绍一下AndroidNDK编程的原理,我们知道Android开发使用JAVA语言来编程它的运行效率要比C/C++低很多,为了让JAVA语言可以调用C/C++这时候NDK就出现了,使用DNK可以很方便的实现...

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

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    30天自制C++服务器,包含教程和源代码

    先说结论:不管使用什么语言,一切后台开发的根基,是面向Linux的C/C++服务器开发。 几乎所有高并发服务器都是运行在Linux环境的,笔者之前也用Java、node写过服务器,但最后发现只是学会了一门技术、一门语言,而...

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

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JNI完全技术手册 带完整书签

    Chap11:如何在C/C++中调用Java. 80 1.环境搭建... 81 2.初始化虚拟机... 83 3.访问类方法... 85 4访问类属性... 87 5.访问构造函数... 88 6.数组处理... 89 7.中文处理... 89 8.异常... 91 9.线程和同步...

    java开源包11

    php调用java类 Java批量作业执行框架 MyBatchFramework MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包...

Global site tag (gtag.js) - Google Analytics