0

我正在尝试使用DefineClass,它是Java Native Interface的一部分。该方法采用 a const jbyte*which is a const signed char*,我试图从 Qt 资源中解析它。但是一定有什么问题,因为ExceptionDescribe()打印java.lang.ClassFormatError: Truncated class file

QFile qfile(":/SomeClass.class");
qfile.open(QFile::ReadOnly)

QByteArray qbytes = qfile.readAll();
char *test = qbytes.data();
jbyte *buf = reinterpret_cast<jbyte*>(test);

jclass processorCls = env->DefineClass("example/SomeClass", nullptr, buf, sizeof(buf)); 

if (env->ExceptionCheck())
{
    env->ExceptionDescribe();
    env->ExceptionClear();
}

我可以验证资源是否有效,因为我能够使用此处qfile找到的方法打印 的内容。

void read(QString fName)
{
    QFile file(fName);
    if (!file.open(QFile::ReadOnly | QFile::Text))
    {
        std::cout << "Could not open the file for reading" << std::endl;
        return;
    }

    QTextStream in(&file);
    QString text = in.readAll();

    std::cout << text << std::endl;

    file.close();
}
4

1 回答 1

0

返回指针的sizeof(buf)大小,而不是缓冲区的大小。请qbytes.size()改用。

于 2019-12-07T16:04:24.300 回答