2009-06-03 87 views
3

所以我一直在調查JNI調用,所以我可以與一些預先編寫的C++程序進行交互,我不知道任何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

謝謝!愚蠢的我,忘了那頭業務 – 2009-06-03 14:56:32

2

將myMethod()移到源文件中的Java_StringFuncs_changeWord()之上。

2

在C++中,你通常必須在使用它之前聲明一個符號。因此,地方Java_StringFuncs_changeWord之前,你需要聲明myMethod的:

bool myMethod(); 

如果這將是一個共享功能(其它CPP模塊將調用它),那麼你很可能希望把它放在它可以是一個頭文件#包含其他文件。如果該函數只有在被該模塊調用時纔有意義,那麼您希望將聲明放在文件的頂部,在其他#includes之後。

您也可以通過在調用它的函數上移動整個函數來一次性聲明和定義函數,但是這種方法總是可行的(如果您有兩個引用彼此的函數,您必須單獨聲明)。