2009-12-17 9 views
0

J'utilise JNA pour accéder à une DLL personnalisée qui semble utiliser les conventions d'appel FAR PASCAL, mais la JVM se bloque chaque fois que j'essaie d'y accéder.en utilisant jna avec la DLL personnalisée FAR PASCAL

Guide de développement de la DLL dit: BOOL FAR PASCAL GetIomemVersion (LPSTR);

et dépendance Walker me dit: _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; 
    } 
} 

Avec le code C# il fonctionne bien en utilisant

[DllImport("iomem.dll", EntryPoint = "[email protected]")] 
public static extern bool GetIomemVersion(IntPtr version); 

Pouvez-vous me dire ce que je fais mal? Merci d'avance !!!

Répondre

0

Problème résolu,

J'ai juste utilisé le mauvais paramètre .. GetIomemVersion a besoin d'un pointeur

boolean _GetIomemVersion(Pointer version); 


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