问题补充:首先是java代码:
public final class MyFileTime {
/**
* 只加载一次MyFileTime.dll
* @param args
*/
static {
System.loadLibrary("MyFileTime");
}
/**
* 调用入口dll(该路口经过c++再次封装)
* @param fileName
* @return
*/
private static native String getFileCreationTime(String fileName);
public static String getCreationTime(String fileName) {
return getFileCreationTime(fileName);
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
/*
* 这里会循环调用方法
* MyFileTime.dll
* 但是MyFileTime.dll中的Test_DLL2.dll是否会多次调用
*/
String ss = MyFileTime.getCreationTime("");
System.out.println(ss);
}
}
}
下面是c++代码
#include "stdafx.h"
#include
#include
#include "MyFileTime.h"
/*该方法是java调用入口,MyFileTime.dll 我可以控制java中只加载该dll一次,但是无法确定是否
会多次加载Test_DLL2.dll
*/
JNIEXPORT jstring JNICALL Java_cn_imu_jni_MyFileTime_getFileCreationTime(JNIEnv *env, jobject cls, jstring FileName){
/*由于java调用dll都是走该方法入口,所以java每次调用Java_cn_imu_jni_MyFileTime_getFileCreationTime
都会进行加载一次Test_DLL2.dll,我担心是这样频繁加载会造成不良后果
是否有什么有效方法使得我不在该方法里面加载Test_DLL2.dll,
而只是在第一次加载,其他时候不加载,就相当于静态初始化或者单利,一样
*/
HINSTANCE hInst = LoadLibraryA("Test_DLL2.dll");//载入
//-------------------
/*
业务逻辑调用,调用dll2的接口方法
*/
//------------------
return "";
}
请大家看看是否有什么有效方法像java一样在
static {
System.loadLibrary("MyFileTime");
}
MyFileTime.dll中只加载一次Test_DLL2.dll