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);
}
}