【发布时间】:2009-12-17 16:58:08
【问题描述】:
我正在使用 JNA 访问自定义 DLL,该 DLL 似乎使用 FAR PASCAL 调用约定,但每次我尝试访问它时 JVM 都会崩溃。
dll 的开发指南说: BOOL FAR PASCAL GetIomemVersion(LPSTR);
Dependency Walker 告诉我: _GetIomemVersion@4
public class PebblePrinter {
public interface Iomem extends StdCallLibrary {
boolean _GetIomemVersion(String version);
}
String version;
Iomem INSTANCE;
StdCallFunctionMapper myMapper;
public PebblePrinter() {
HashMap optionMap = new HashMap();
myMapper = new StdCallFunctionMapper();
optionMap.put(Library.OPTION_FUNCTION_MAPPER, myMapper);
INSTANCE = (Iomem)Native.loadLibrary("iomem", Iomem.class,optionMap);
}
public String getIomemVersion(){
INSTANCE._GetIomemVersion(version);
return version;
}
}
使用 C# 代码可以很好地使用
[DllImport("iomem.dll", EntryPoint = "_GetIomemVersion@4")]
public static extern bool GetIomemVersion(IntPtr version);
你能告诉我我做错了什么吗? 提前谢谢!!!
【问题讨论】: