Использование JNA с FAR PASCAL Custom DLL - PullRequest
0 голосов
/ 17 декабря 2009

Я использую JNA для доступа к пользовательской DLL, которая, кажется, использует соглашения о вызовах FAR PASCAL, но JVM падает каждый раз, когда я пытаюсь получить к ней доступ.

Руководство по разработке dll гласит: BOOL FAR PASCAL GetIomemVersion (LPSTR);

И Зависимость Уокер говорит мне: _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);

Можете ли вы сказать мне, что я делаю неправильно? Заранее спасибо !!!

1 Ответ

0 голосов
/ 17 декабря 2009

Проблема решена,

Я только что использовал неправильный параметр .. 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);   
}
...