Linux Install

Android

Linux Tools

Linux AV

Linux Memo

WINDOWS

PROGRAM

動画 Memo

音楽 Memo

モバイルアプリ Memo

FILE FORMAT

PROTOCOL

DEVICE

BookMark

その他


jna   

Java から DLL を呼ぶ方法


制約とか前提とか

  • jna-4.2.0.jar
  • 今回試したのは win32 の DLL 呼び出しなので、so 等ではあてはまらないかも
  • 基本的には extern C の DLL しか呼べないと思ったほうがいい
    • jna-package の方にあるけど、面倒そう
    • 今回は VisualStudio で C のラッパーを書いた。
    • jcom とか jnaerator でもできそうだけどまた今度
  • COM の DLL はラッパーの DLL 書いたほうが楽だと思う
  • 32bit の DLL 呼び出しは 32 bit の java でしか動かない
  • 古い DLL の場合は文字コードはえてして SJIS なのでラッパーを書くかどこかでがんばる

java

コンパイル

javac -cp jna-4.2.0.jar HelloJNA.java 2>&1 |nkf -w

実行

java -cp ".;jna-4.2.0.jar" HelloJNA  2>&1 | nkf -w

sample

import com.sun.jna.*;
import com.sun.jna.ptr.*;

public class HelloJNA{
  public interface User32Dll extends Library  {
    User32Dll INSTANCE = (User32Dll)Native.loadLibrary("user32.dll", User32Dll.class);
    int MessageBoxA(int hWnd, String lpText, String lpCaption, int uType);  
  }
  public static final void main(String[] args){
    User32Dll.INSTANCE.MessageBoxA(0,"sample",args[0],0x00000000);
  }
}