JNI:第三方共享库中调用函数的字符串行为不一致

时间:2014-09-30 17:53:37

标签: java c java-native-interface

我正在编写一个JUnit测试来验证以下本机方法:

public native String mkString(byte[] bytes);

作为本机代码的一部分,我调用一个在第三方共享库中返回const char *的函数。我做了一个dlsym并获得了一个指向第三方函数的函数指针。

mkStringFn = (const char *(*)(char*, int)) dlsym(handle, "mkString");

在调试时我发现第三方函数mkString中的return语句中的while,返回变量总是具有正确的值。

但是我看到,对于相同的输入,我从调用函数指针获得的返回值有时是"",有时则是正确值。

这就是我调用函数指针的方法

madeString = (* mkStringFn)((char *)bufferPtr, len); //madeString is sometimes empty (not NULL) and sometimes has the right value

我验证了传递给函数指针的bufferPtr和len参数是否有效。

为什么这种方法有时会起作用?

0 个答案:

没有答案