
用C++写的动态库的导出方法的代码如下:
1struct TestStruct { 2 int a; 3 int b; 4}; 5 6extern "C" __declspec(dllexport) TestStruct* ShowStruct(TestStruct* testStruct) 7{ 8 cout << "在动态库中打印:传入动态库中的结构成员a的值为:" << testStruct->a << endl; 9 10 //改变传入结构成员a的值为100 11 testStruct->a = 100; 12 return testStruct; 13}
Read More- 记得以前 Java 要调用C/C++写得动态库都是用的 JNI 方式,还需要自己写不少 C/C++ 代码。比如说要在Java中调用已有的动态库,如 Windows 的 user32.dll 的方法 MessageBoxA,具体步骤是 Java 中声明一个 native 方法,然后用 javah 命令生成JNI样式的头文件,再自己实现头文件中声明的方法,在实现方法中装载动态库 user32.dll,调用 MessageBoxA 方法,需要把自己写的这部分 C/C++ 代码封装成一个动态库,如Sample.dll,最后在 java 中装载 Sample.dll,然后执行其中所声明的本地方法。
可见,用老实的JNI方式,我们在调用一个已知动态库的时候还需要额外生成一个符合JNI规则的动态库作为桥梁,显得有点多余了。 Read More