Hem Windows hem de Linux'ta çalışacak bir java projesi üzerinde çalışıyorum ve her iki işletim sisteminde de kullanılabilen üçüncü taraf bir paylaşılan kitaplık kullanıyorum aynı yöntemlerin imzası. Ancak dll'nin çağrı kuralı, paylaşılan nesne cdecl iken stdcall'tır.JDN'de .dll ve .so aynı geri çağırma imzasıyla nasıl kullanılır?
Geri arama kodunu, iki arabirimi ve iki sınıfı, her arama kuralı için bir arabirimi çoğaltmaktan kaçınmak istiyorum. Geri arama işlevi için tek bir kod yazmak istiyorum. Mümkün mü?
Linux'a erişmek için aşağıdaki koddaki tek değişiklik, arabirimdir. Geriçağırım işlevi kodu kendisi aynıdır. Herhangi bir emziği takdir edeceğim.
//Interface to stdcall (Windows)
package test1;
import com.sun.jna.win32.StdCallLibrary;
interface IExternLibCallback extends StdCallLibrary.StdCallCallback {
void callback (JEventDataStructure context_data);
}
//Class that implements the interface
package test1;
class ExternLibCallback implements IExternLibCallback {
... Other class codes go here ....
@ Override
public void callback (JEventDataStructure contextData) {
... Code of callback function
}
}
sayesinde
Fernando
technomage tepkisi çok çok daha KISS uyumludur kodun çoğalmasını önler ve önlenebilir “if” (somefunc2'yi uygulamanız gerektiğinde ne yapacaksınız?) – Cerber