私はあなたにこの提案をすることができます、私の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とJNIについてグーグルした後、いくつかのことを学びました):ネイティブのDelphi実装を提供した人々(あなたが1人でない場合)に尋ねてください関数名を次のようなものに変更するコード:
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;
しかし、最後のアドバイス:あなた(あなたがデルファイプログラマーの場合)または彼らはこれらの関数のプロトタイプを変更してdllファイルを再コンパイルしますが、dllファイルがコンパイルされると、あなたのパッケージ名を変更することはできません「Java」ファイルを何度も繰り返します。なぜなら、これもまた、プレフィックスが変更されたdelphiの関数のプロトタイプを変更する必要があるためです(例:JAVA_yourpackage_with_underscores_for_inner_packages_JavaFileName_MethodName)
これで問題は解決すると思います。よろしくお願いいたします。HarshalMalshe