zoukankan      html  css  js  c++  java
  • 多语言调用之 Java调用C/C++

    Java 调用 C/C++
    1.创建一个类com.test.TestCall
    内容如下
    package com.test;

    public class TestCall {

     public native String getResponse(String request);
    }

    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这种格式定义头文件,只要定义一个方法接口,支持指针,非常好用。

  • 相关阅读:
    了解Onunload,onbeforeunload事件
    asp.net 获取客服端的Ip地址
    HttpWebRequest WebResponse 对象简单了解
    web 编辑word 之dsoframer控件
    web编辑word之dsoframer(二)
    WebClient 对象实现下载和上传
    jquery datagrid 后台获取datatable处理成正确的json字符串
    doc文档的web查看
    C#中处理字符串对象的函数
    类3-类的static属性
  • 原文地址:https://www.cnblogs.com/marryZhan/p/2213971.html
Copyright © 2011-2022 走看看