C++中使用JNI的方法调用?

3

我一直在研究JNI调用,以便与一些预先编写的C++程序进行交互,但我不懂C++,正在尝试学习一些基础知识。我只是想尝试调用我的JNI方法之外的一个简单方法,但总是会出现以下错误:

错误c3861:“myMethod”:找不到标识符

#include <stdio.h>
#include <string.h>
#include "StringFuncs.h"    

JNIEXPORT jstring JNICALL Java_StringFuncs_changeWord(JNIEnv *env, jobject obj, jstring inStr, jint inLen) 
{
    const char *inString;

    inString = env->GetStringUTFChars(inStr, NULL);


    char otherString[40];
    strcpy_s(otherString,inString);

    if(myMethod())
    {
        memset(otherString, '-', inLen);
    }

    jstring newString = env->NewStringUTF((const char*)otherString);
    return newString;
}

bool myMethod()
{
    return true;
}

int main()
{
    return 0;
}

有什么智慧的话吗?
3个回答

3

在调用方法之前,您必须声明它们。因此,在您的头文件中输入 bool myMethod();

或者您可以将代码移动到_changeWord函数上面,这样声明/定义就在一个位置了。


2

将myMethod()移动到Java_StringFuncs_changeWord()之前的源文件中。


2

在C++中,通常需要在使用符号之前先声明它。因此,在Java_StringFuncs_changeWord之前的某个地方,您需要声明myMethod:

bool myMethod();

如果这个函数将会被共享(其他cpp模块将会调用它),那么你最好把它放在一个头文件中,这样其他文件就可以使用#include引用。如果这个函数只有在这个模块中被调用才有意义,你需要把声明放在文件顶部,在其他#include之后。
你也可以通过把整个函数移到调用它的函数之上来同时声明和定义该函数,但这并不总是有效的(如果你有两个相互引用的函数,你必须有一个单独的声明)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接