Я работаю над java-проектом для запуска как в Windows, так и в Linux, и я использую стороннюю разделяемую библиотеку, доступную для обеих операционных систем с одинаковой сигнатурой методов. Но соглашение о вызовах dll - это stdcall, а общий объект - cdecl.
Я бы хотел избежать дублирования кода обратного вызова, двух интерфейсов и двух классов, по одному интерфейсу для каждого соглашения о вызовах. Я хотел бы написать единый код для функции обратного вызова. Возможно ли это?
Единственное изменение в приведенном ниже коде для доступа к .so в linux - это интерфейс. Сам код функции обратного вызова такой же. Буду признателен за любые предложения.
import com.sun.jna.Callback;
interface IExternLibCallback extends Callback {..}
Это код, который я написал для обратного вызова в dll:
//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
}
}
Спасибо,
Фернандо