使用JNA连接自定义dll

11

如何使用JNA访问自定义的.lib/.dll函数?能否提供一个示例?

谢谢。

1个回答

13

例子(来自维基百科):

import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Native;

/** Simple example of Windows native library declaration and usage. */
public class BeepExample {
   public interface Kernel32 extends StdCallLibrary {
       // FREQUENCY is expressed in hertz and ranges from 37 to 32767
       // DURATION is expressed in milliseconds
       public boolean Beep(int FREQUENCY, int DURATION);
       public void Sleep(int DURATION);
   }
   public static void main(String[] args) {
    Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", 
           Kernel32.class);
    lib.Beep(698, 500);
    lib.Sleep(500);
    lib.Beep(698, 500);
   }
}
在这种情况下,我们从“kernel32.dll”库中加载它。 我希望这样能让JNA更清晰易懂。
编辑:我将解释一下代码: 您需要定义一个接口(扩展com.sun.jna.Library),其中包含所需函数的库。 然后,调用com.sun.jna.Native.loadLibrary(“LibraryName”,InterfaceName.class)。 最后,将输出存储在与接口类型相同的变量中。 只需从该变量调用函数。

1
你应该扩展StdCallLibrary以适用于你所提供的特定示例。它是否适用于用户自定义库取决于该库使用的调用约定。 - technomage
如何为我的自定义dll提供路径?我的意思是,如果我的dll位于e:/Mydll某处。那么如何提供路径?如果使用其他dll和库创建了Mydll,那我是否还需要在某个地方提供这些dll的路径? - Jony
你应该将你的dll或lib路径添加到你的环境变量中,或者将路径添加到类路径参数中。 - Markian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接