【发布时间】:2011-06-02 20:03:50
【问题描述】:
我正在开发一个可在 Windows 和 Linux 上运行的 java 项目,并且我正在使用具有相同方法签名的两个操作系统都可用的第三方共享库。但是,dll的调用约定是stdcall,而共享对象是cdecl。
我想避免重复回调代码,两个接口和两个类,每个调用约定一个接口。我想为回调函数编写一个代码。这可能吗?
在下面的代码中,在 linux 中访问 .so 的唯一变化是接口。回调函数代码本身也是一样的。我会很感激任何建议。
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
}
}
谢谢,
费尔南多
【问题讨论】:
标签: java linux dll callback jna