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));
}
}