windows的库函数需要使用特殊的方式导出,如下所示:
#ifndef VFP_DLL_API
#if (defined _MSC_VER) && (defined USE_DLL)
// 为什么不适用 stdcall, 因为测试发现 JNA 好像不支持, 待确认
#define VFP_DLL_CALLCONV _cdecl
#if defined DLL_EXPORT
#define VFP_DLL_API __declspec(dllexport)
#else
#define VFP_DLL_API __declspec(dllimport)
#endif
#else
#define VFP_DLL_CALLCONV
#define VFP_DLL_API
#endif
#endif
然后这样声明函数
VFP_DLL_API void VFP_DLL_CALLCONV test(int a, int b){}
CMakeLists不需要特殊处理,Java端的话,
public class HelloWorld {
public native void test(int a, int b);//所有native关键词修饰的都是对本地的声明
static {
System.loadLibrary("mylib");//载入本地库
}
public static void main(String[] args) {
test(1,2);
}
}