Tôi có thể cung cấp cho bạn đề xuất này, Theo như được biết từ kinh nghiệm Lập trình C và C++, Một lần, khi tôi gặp vấn đề tương tự, tôi đã giải quyết nó bằng cách thay đổi cấu trúc viết dll trong ".C" bằng cách thay đổi tên của hàm thực hiện chức năng gốc JNI. ví dụ: Nếu bạn muốn thêm chương trình của mình vào gói "com.mypackage", Bạn thay đổi nguyên mẫu của việc triển khai JNI ".C" File của chức năng/phương pháp này một:
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
}
Kể từ khi tôi mới đến Delphi, tôi không thể đảm bảo với bạn nhưng sẽ nói điều này cuối cùng, (Tôi đã học được vài điều sau khi googling về Delphi và JNI): Hỏi những người (Nếu bạn không phải là một trong những) người cung cấp việc thực hiện Delphi đa mã gốc để thay đổi tên hàm một cái gì đó như thế này:
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;
Nhưng, một lời khuyên cuối cùng: Mặc dù bạn (Nếu bạn là delphi lập trình viên) hoặc chúng sẽ thay đổi nguyên mẫu của các hàm này và biên dịch lại tệp dll, khi tệp dll được biên dịch, bạn sẽ không thể thay đổi tên gói của tệp "Java" của bạn lại một lần nữa &. Bởi vì, điều này một lần nữa sẽ yêu cầu bạn hoặc họ thay đổi các nguyên mẫu của các chức năng trong delphi với tiền tố thay đổi (ví dụ JAVA_yourpackage_with_underscores_for_inner_packages_JavaFileName_MethodName)
Tôi nghĩ rằng đây giải quyết vấn đề. Trân trọng cảm ơn, Harshal Malshe
Nguồn
2010-03-14 10:02:03
Tôi tìm thấy liên kết này: http://stackoverflow.com/questions/283816/how-to-access-java-classes-in-the-default-package sau khi tạo câu hỏi này. –
có thể trùng lặp của [Cú pháp để nhập một lớp trong một gói mặc định trong Java là gì?] (Http://stackoverflow.com/questions/2030148/whats-the-syntax-to-import-a-class-in-a -default-package-in-java) – Pops
Tất nhiên, bit quan trọng của câu hỏi này là lớp ** và ** mã của nó ** phải nằm trong gói mặc định **. Hiện tại, bất kỳ câu trả lời nào khác ngoài việc sử dụng API phản chiếu * (thực sự, quá mức cần thiết cho một cái gì đó đơn giản này) * là ** không ** một giải pháp. Đó là tâm-boggling như thế nào Java cố gắng để có bánh của nó (ngăn cản gói mặc định) và ăn nó quá (làm cho JNI rất phức tạp, hầu hết chúng ta kết thúc bằng cách sử dụng DLL yêu cầu gói mặc định). – ADTC