Я могу дать вам это предложение,
Насколько я знаю из моего опыта программирования на C и C ++,
Однажды, когда у меня возникла такая же проблема, я решил ее, изменив структуру dll, записанную в файле ".C", изменив имя функции, в которой реализована собственная функциональность JNI.
например, если вы хотите добавить свою программу в пакет "com.mypackage",
Вы изменяете прототип JNI, реализующий функцию / метод файла ".C" на этот:
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, я не могу гарантировать вам, но скажу это наконец, (я узнал несколько вещей после поиска в Google о 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" снова и снова.
Потому что это снова потребует, чтобы вы или они изменили прототипы функций в Delphi с измененными префиксами (например, JAVA_yourpackage_with_underscores_for_inner_packages_JavaFileName_MethodName)
Я думаю, что это решает проблему.
Спасибо и всего наилучшего,
Харшал Малше