이 제안을 드릴 수 있습니다. 제 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
}
델파이를 처음 접했기 때문에 장담 할 수는 없지만 마침내 이렇게 말할 것입니다. (델파이와 JNI에 대해 인터넷 검색을 한 후 몇 가지를 배웠습니다.) : 네이티브의 델파이 구현을 제공 한 사람들에게 물어보십시오. 함수 이름을 다음과 같이 변경하는 코드 :
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"파일을 반복합니다. 왜냐하면 이것은 변경된 접두사 (예 : JAVA_yourpackage_with_underscores_for_inner_packages_JavaFileName_MethodName)로 델파이에서 함수의 프로토 타입을 변경해야하기 때문입니다.
이것이 문제를 해결했다고 생각합니다. 감사합니다. Harshal Malshe