jna の変更点   

  • 追加された行はこの色です。
  • 削除された行はこの色です。
  • jna へ行く。

Java から DLL を呼ぶ方法~


----
* 制約とか前提とか [#hd63677b]
- 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 [#z0b521fc]
コンパイル
 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 [#oc749987]
#pre{{
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);
  }
}
}}