私はあなたにこの提案を与えることができます、私のCおよびC ++プログラミングの経験から知る限り、同じような問題があったときに、「。C」ファイルのdll記述構造を変更して解決しました。 JNIネイティブ機能を実装した関数。たとえば、プログラムをパッケージ「com.mypackage」に追加したい場合は、「。C」ファイルの関数/メソッドを実装するJNIのプロトタイプを次のように変更します。
JNIEXPORT jint JNICALL
Java_com_mypackage_Calculations_Calculate(JNIEnv *env, jobject obj, jint contextId)
{
//code goes here
}
JNIEXPORT jdouble JNICALL
Java_com_mypackage_Calculations_GetProgress(JNIEnv *env, jobject obj, jint contextId)
{
//code goes here
}
私はdelphiを初めて使用するので、保証はできませんが、最後にこう言います(DelphiとJNIについてグーグルで調べたところ、いくつかのことを学びました):ネイティブのDelphi実装を提供した人(そうでない人)に聞いてください関数名を次のように変更するコード:
function Java_com_mypackage_Calculations_Calculate(PEnv: PJNIEnv; Obj: JObject; contextId: JInt):JInt; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
var
//Any variables you might be interested in
begin
//Some code goes here
end;
function Java_com_mypackage_Calculations_GetProgress(PEnv: PJNIEnv; Obj: JObject; contextId: JInt):JDouble; {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
var
//Any variables you might be interested in
begin
//Some code goes here
end;
しかし、最後のアドバイス:あなた(delphiプログラマーの場合)またはそれらはこれらの関数のプロトタイプを変更してdllファイルを再コンパイルしますが、dllファイルがコンパイルされると、パッケージ名を変更できなくなります「Java」ファイルを何度も繰り返します。なぜなら、これにより、あなたまたは彼らは、デルファイの関数のプロトタイプをプレフィックスを変更して変更する必要があります(例:JAVA_yourpackage_with_underscores_for_inner_packages_JavaFileName_MethodName)
これで問題は解決すると思います。よろしくお願いいたします。HarshalMalshe