• java 调用c++程序实例


    1.java程序:

    package com.zhangshitong;
    
    import java.io.File;
    
    public class Java2cpp {
    
        static{
             System.load("F:" + File.separator + "JavaCallcpp.dll");
        }
        
        public native int DLL_ADD(int a, int b); //add method
        
        public static void main(String[] args) {
            int sum =0;
            Java2cpp test = new Java2cpp();
            sum = test.DLL_ADD(45, 2);
            System.out.println("the result is: "+ sum);
        }
    }

    2. 找到java程序的.class文件,笔者用的是eclipse,所以找到项目的bin目录 cmd下使用  javah -classpath . -jni com.zhangshitong.Java2cpp

    或生成com_zhangshitong_Java2cpp.h文件

    3.以下步骤就是生成dll文件了,笔者用的visual studio 2008 

    需要注意的是需要安装64位的编译器,操作步骤详见:https://jingyan.baidu.com/article/a501d80c1aa5a4ec630f5eb6.html

    导入相关.h头文件:  1)com_zhangshitong_Java2cpp.h;  2)jni.h和jni_md.h问jdk中的头文件,在JDK_HOMEinclude 和DK_HOMEincludewin32中  拷贝到工程的头文件夹中,拷贝完之后,还需要引入

    4.  com_zhangshitong_Java2cpp.h文件 中的改为本地引用  com_zhangshitong_Java2cpp.h文件

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include "jni.h"
    /* Header for class com_zhangshitong_Java2cpp */
    
    #ifndef _Included_com_zhangshitong_Java2cpp
    #define _Included_com_zhangshitong_Java2cpp
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_zhangshitong_Java2cpp
     * Method:    DLL_ADD
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD
      (JNIEnv *, jobject, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif

    相应的cpp文件:

    // JavaCallcpp.cpp : 定义 DLL 应用程序的导出函数。
    //
    
    #include "stdafx.h"
    #include <iostream>
    #include "com_zhangshitong_Java2cpp.h"
    using namespace std;
    JNIEXPORT jint JNICALL Java_com_zhangshitong_Java2cpp_DLL_1ADD(JNIEnv *, jobject, jint a ,jint b)
    {
        return a+b;
    }

    5.生成dll文件时 需用release模式,笔者再用debug模式的时候报错

    6.生成dll,然后把生成的dll拷贝到指定的目录,java程序在该位置调用即可

    相应的c++项目的目录结构是:

     红色框中的都是vs2008自动生成的

  • 相关阅读:
    Asp.Net细节性问题技巧精萃
    存储过程(Stored Procedure)及应用
    合并datagrid中内容相同的单元格
    .net 2.0 下发送邮件的方式
    ADO.NET2.0的十大新特性
    sql server 中各个系统表的作用
    DataGrid一些文章的索引,方便查找
    ASP.NET中 WebControls 命名规则
    SQL Server应用程序中的高级SQL注入[转]
    数据操作例子
  • 原文地址:https://www.cnblogs.com/zhangshitong/p/9030156.html
Copyright © 2020-2023  润新知