これをstackoverflowとインターネットで検索しましたが、まだ答えが見つかりません。
ソースコードを入手していない指紋リーダーのSDKがあります。つまり、変更できません。
アクセスする必要があるいくつかのメソッドがあり、そのインターフェイスを以下にリストします (RS_API.h から)。
REALSCANSDK_API int __stdcall RS_InitSDK( const char* configFileName, int option, int* numOfDevice );
REALSCANSDK_API int __stdcall RS_InitDevice( int deviceIndex, int*deviceHandle );
REALSCANSDK_API int __stdcall RS_SetCaptureMode( int deviceHandle, int captureMode, int captureOption, bool withModeLED );
REALSCANSDK_API int __stdcall RS_SetViewWindow( int deviceHandle, HWND windowHandle, RECT drawRectangle, bool autoContrast );
REALSCANSDK_API int __stdcall RS_TakeImageDataEx( int deviceHandle, int timeout, int fingerIndex, bool withLED, unsigned char** imageData, int* imageWidth, int* imageHeight );
それらすべてを Delphi に変換することはできましたが、Java アプリからもアクセスしたいと考えていました。
私のプロトタイプは次のようなものです:
public class Leitor {
public native int RS_InitSDK(String configFileName, int option, int numOfDevice );
public static void main(String[] args) {
Leitor leitor= new Leitor();
leitor.RS_InitSDK(null, 0, 0);
}
static
{
System.load("C:\\temp\\SDKSuprema\\SDK\\RS_SDK.dll");
}
}
ロード ビットは正常に動作します (dll ファイルを見つけることができることを意味すると思います) が、ネイティブ メソッドを実行すると例外がスローされます。
スレッド「メイン」での例外 java.lang.UnsatisfiedLinkError: leitor.Leitor.RS_InitSDK(Ljava/lang/String;II)I at leitor.Leitor.RS_InitSK(Native Method) at leitor.Leitor.main(Leitor.java:14)
dllの名前を変更すると、エラーが「ライブラリを読み込めません」に変わるため、メソッドのマッピングに問題があると思います。
また、Java から呼び出される参照パラメーターによるパスをマップする方法も見つかりませんでした。唯一の解決策は、単一の結果ではなく構造を返すように dll を変更することでしたが、コードを変更できないため、これは不可能です。
2 つ目の問題は、ウィンドウ ハンドルを swt から JNI ネイティブ メソッドに送信することです...
どんな助けでも大歓迎です!