【问题标题】:using jna with FAR PASCAL custom dll将 jna 与 FAR PASCAL 自定义 dll 一起使用
【发布时间】: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);

你能告诉我我做错了什么吗? 提前谢谢!!!

【问题讨论】:

    标签: dll jna


    【解决方案1】:

    问题解决了,

    我刚刚使用了错误的参数.. GetIomemVersion 需要一个指针

    boolean _GetIomemVersion(Pointer version);
    
    
    public String getIomemVersion(){    
       Memory m = new Memory(1024);
       Pointer x = m.getPointer(0);
       INSTANCE._GetIomemVersion(x);
       return x.getString(0);   
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-29
      • 1970-01-01
      • 2017-09-30
      • 2017-07-04
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多