通过JNI调用低级函数时出错

时间:2017-05-02 09:44:00

标签: java java-native-interface

我正在将Java绑定编写到闭源数据采集库(用C编写),该库设置DMA并与PC上安装的PCIe卡接口。

C库具有简单的初始化功能。如果没有错误,则返回0:

int InitPanel();

当我在C ++项目中调用该函数时,它的工作正常。

int main()
{
   // errorCode is 0 after this function call.
   int errorCode = InitPanel();
   std::cout << "ErrorCode: " << errorCode << std::endl;
}

所以我把C ++项目变成了一个与该函数有JNI绑定的DLL,所以我可以用Java调用它:

JNIEXPORT jint JNICALL Java_com_DataAcquisition_Init(JNIEnv* env, jclass cla)
{
   return InitPanel();
}

Java在调用该函数时没有问题,但由于某些原因,InitPanel在从Java调用时返回错误代码。错误是无用的&#34;无法初始化面板&#34;。

  • Java运行时和C库都是64位:我甚至测试过将-d64传递给VM。
  • 没有&#34;不满意的链接错误&#34;一点都没在这两种情况下,C库似乎都具有所有必需的依赖性。
  • 它似乎不是一个权限错误;我已经测试过禁用UAC,防火墙等等。
  • 我尝试过提高Java VM内存(通过Xms / Xmx)可能会限制进程的最大内存。

还有什么其他可能的东西?

0 个答案:

没有答案