我正在 Android 应用程序中使用 NDK 试用 FreeType2。
我使用的工作流程是
但我在连接真实设备时遇到问题。
这是我的活动/课程
在 EMULATOR 上,它似乎返回了一个正确的句柄,但在真实设备上我得到了很大的负数作为句柄。回到应用程序。
这是我的通话 cpp 代码
/*********THIS DOESNT WORK ON real USB connected device ******
extern "C"
JNIEXPORT jlong JNICALL
Java_com_pearlspotsystems_nativecppwithft_MainActivity_getFTLibrary(JNIEnv *env, jobject thiz)
{
FT_Library library;
int major, minor, patch;
long err = FT_Init_FreeType(&library);
if(err) {
return 0;
} else {
return (jlong) library;
}
}
在真实设备上,我在应用程序中得到类似“-547637666626 ...”的句柄 这看起来不像一个合适的指针/句柄
1.这是将 FT_Library 转换为 jlong 的问题吗?或者是其他东西。 2. 为什么它可以在模拟器上运行? 3. 有趣的是,我的另一个函数初始化 FT 并获取版本并返回 字符串中的细节甚至可以在真实设备上使用。这是 CPP 的..
**/********THIS WORKS ON BOTH EMULATOR and REAL DEVICE!!!!***/**
extern "C"
JNIEXPORT jstring JNICALL
Java_com_pearlspotsystems_nativecppwithft_MainActivity_getFreeTypeVersion(JNIEnv *env,
jobject thiz) {
FT_Library library;
int major, minor, patch;
long err = FT_Init_FreeType(&library);
if(err) {
std::string err_string = "Error!!!!!!!";
return env->NewStringUTF(err_string.c_str());
} else {
FT_Library_Version((FT_Library) library, &major, &minor, &patch);
std::string ret_string = "FT-Version:" + std::to_string(major) + "." +
std::to_string(minor);
return env->NewStringUTF(ret_string.c_str());
}
}
怎么了?有人能指出我正确的方向吗?