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;
}

wisdomeの言葉はありますか?

4

3 に答える 3

3

メソッドを呼び出す前に、メソッドを宣言する必要があります。したがって、ヘッダーにはbool myMethod();と入力します。

または、コードを_changeWord関数の上に移動すると、宣言/定義が1つになります。

于 2009-06-03T14:49:39.740 に答える
2

myMethod()をソースファイルのJava_StringFuncs_changeWord()の上に移動します。

于 2009-06-03T14:50:19.550 に答える
2

C ++では、通常、シンボルを使用する前にシンボルを宣言する必要があります。したがって、Java_StringFuncs_changeWordの前のどこかで、myMethodを宣言する必要があります。

bool myMethod();

これが共有関数になる場合(他のcppモジュールが呼び出す)、他のファイルに#includeできるヘッダーファイルに入れたいと思うでしょう。関数がこのモジュールによって呼び出されることだけが理にかなっている場合は、他の#includeの後に、ファイルの先頭に宣言を配置する必要があります。

関数全体をそれを呼び出す関数の上に移動することで、関数を一度に宣言および定義することもできますが、これは常に機能するとは限りません(相互に参照する2つの関数がある場合は、個別の宣言が必要です)。

于 2009-06-03T15:00:22.183 に答える