VS 创建C++动态链接库,Java JNI调用

VS创建动态链接库,可以直接创建动态链接库项目,或者直接创建一个空项目,如果是直接的空项目,只需要修改两个地方

1、预编译头中设置“不使用预编译头”,"pch.h",

2、常规 中的配置类型改为“动态库dll”就可以了

 

因为要使用jni的资源库,需要在c++目录里设置包含jdk目录下的include 和include\win32,

如下:

之后,创建头文件,发布对外的接口函数

#pragma once


/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"

extern "C" {
	/*
	 * Class:     com_Test
	 * Method:    writeAdd
	 * Signature: ()I
	 */
	JNIEXPORT jint JNICALL Java_com_Test_writeAdd
	(JNIEnv*, jobject, jint a, jint b);

}

com_Test是java中的包和类名,要使用一致的包路径和名称(com.Test),

然后,创建一个cpp来实现 函数Java_com_Test_writeAdd

#include "jni.h"
#include "dllByJava.h"

JNIEXPORT jint JNICALL Java_com_Test_writeAdd(JNIEnv*, jobject, jint a, jint b)
{
	return a + b;
};

然后定义程序的入口,创建dllmain.cpp ,就可以生成解决方案了。

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"


BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

将生成的dll复制到Java项目下就可以使用了。

Java中的Test 类,目录和类名要与c++中的统一,Test类如下:

public class Test {
	static{
		System.loadLibrary("Project2");
	}
	
	public native int writeAdd(int a, int b);

    public static void main(String[] args) {
		// TODO Auto-generated method stub
 		Test test = new Test();
		System.out.println("a+b = "+test.writeAdd(10,15));
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值