我已經使用visual studio C++編寫了我的程序,現在我正在嘗試從該代碼創建一個dll以在另一個Java應用程序中使用。例如,我有在C++中的雙功能:在JNI和C++之間發送參數的最佳方式
int __declspec(dllexport) _stdcall login(const unsigned char pin[4])
和
string __declspec(dllexport) _stdcall RNG_Gen (unsigned char* data)
然後我隨後一些網頁的關於如何從C++代碼創建一個DLL使用JNI java的指令,所以我包括「jni.h」,並寫了這樣的另一個函數調用我的函數:
的第一個功能,我使用:
#define JNIEXPORT __declspec(dllexport)
#define JNIIMPORT __declspec(dllimport)
#define JNICALL __stdcall
JNIEXPORT jint JNICALL Java_login
(JNIEnv *env, jobject obj, jbyteArray pin)
{
int len = env->GetArrayLength (pin);
if(len<PIN_SIZE)return -1;
unsigned char buf[4];// = new unsigned char[len];
env->GetByteArrayRegion (pin, 0, len, (jbyte *)(buf));
return login(buf);
}
但我應該怎麼做string
和unsigned char*
在第二個函數?我應該怎麼稱呼那個功能?我應該如何發送一個無符號的char *到那個函數?以及如何獲取返回的字符串?
你不是真的在這裏給非常多的信息。很難知道你的問題是什麼。儘管你試圖返回'std :: string'註定會失敗。你的問題到底是什麼? –
@DavidHeffernan嗨大衛,我需要在Java中使用我的C++代碼,所以我必須使用JNI創建一個DLL。我確切的問題是如何爲C++代碼**而不是C **做到這一點。因爲我曾經使用過C++函數,如'string'等 – osyan
請在問題中提出一個直接而具體的問題,而不是在評論中。不,你將無法像這樣返回'std :: string'。我知道你希望這樣做,但是你的願望並不能實現。它將是DLL邊界上的純C風格的POD類型。 –