首先,有個Hello.dll,裏面有兩個方法:
void print(){
printf("Hello world!this is print methos\n");
}
JNIEXPORT void JNICALL Java_Hello_sayHello(JNIEnv *, jobject){
printf("Hello world!\n");
return ;
}
我們需要在Test.cpp裏調用Java_Hello_sayHello這個方法:
第一步:我們需要一個工具,來查看dll的入口函數,這個工具是Dependency Walker
第二步:用這個工具打開Hello.dll(見附件dll.jpg):
第三步:Test.cpp實現調用Hello.dll
#include <iostream>
#include <jni.h>
#include "Hello.h"
#include "windows.h"
#include "stdafx.h"
typedef void(__stdcall *Print_)();
int main(){
HINSTANCE hDll; //DLL句柄
Print_ print_; //函數指針
hDll = LoadLibrary("Hello.dll");
if (hDll != NULL)
{
print_ = (Print_)GetProcAddress(hDll,"Java_Hello_sayHello@8");
if(print_!=NULL)
{
print_();
}
FreeLibrary(hDll);
}
return 0;
}
這樣,就完成c++調用dll文件。如果java想通過jni調用Test.cpp(Test.dll),在Test.cpp裏按照jni標準格式再封裝一下即可。