2009-06-03 23 views
3

私はいくつかの事前に書かれたC + +プログラムと対話することができるように私はJNIの呼び出しを探しています、私はC + +を知っていないが、いくつかの基本を学ぼうとしています。私はちょうど私のJNIメソッドの外メソッドへの単純な呼び出しをやろうとしているが、常に次のエラーを取得されています:JNIを使​​用したC++でのメソッド呼び出し?

エラー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の任意の言葉を見つけていませんか?

答えて

3

メソッドを呼び出す前に宣言する必要があります。ので、あなたのヘッダーの種類 bool myMethod();

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

+1

ありがとう!愚かな私は、ヘッダービジネスについて忘れてしまった –

2

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

2

C++では、シンボルを使用する前にシンボルを宣言する必要があります。

bool myMethod(); 

これは(他のcppのモジュールがそれを呼びます)の共有機能になるだろうされている場合、あなたが最も可能性の高いことができ、ヘッダファイルに入れたい:だから、どこかJava_StringFuncs_changeWord前にMyMethodはを宣言する必要があります他のファイルに#含まれています。関数がこのモジュールによって呼び出されるだけの意味がある場合は、宣言をファイルの先頭に、他の#includeの後に置いてください。

関数を呼び出す関数の上に関数全体を移動することで、関数を宣言して定義することもできますが、これは常に機能しません(別々の宣言を持つ必要がある関数を2つ持つ場合)。

関連する問題