2013-06-07 1 views
1

스캐너에 연결하고 Java 응용 프로그램의 일부 기능을 수행해야합니다. 고객이 Win32 스캐너 라이브러리 사양을 제공했습니다.Java에서 스캐너 Win32 DLL 호출

Example: BOOL GetScannerInfo(ScannerInfo *scanner) 

구조체 ScannerInfo는 헤더 파일에 정의되어 있습니다.

#define scannerMAX 10 // Maximum number of connected scanners 
typedef struct{ 
     int count;// -> Number of scanners connected 
    BYTE host_no[scannerMAX]; // -> Host adapter number 
    BYTE scsi_id[scannerMAX]; // -> SCSI ID of the scanner 
}ScannerInfo; 

예를 들어, 다음 두 개의 스캐너는 SCSI ID가도 1 및도 2는 하나의 호스트 어댑터에 연결되는 경우, 반환 값이 될 것이다 :

count=2 
host_no[0]=0, host_no[1]=0 
scsi_id[0]=1, scsi_id[1]=2 

을 이제,이 함수를 호출 할 Java로부터 스캐너 관련 정보를 얻을 수 있습니다. 처음 JNA로 시작했습니다. 여기 코드가 있습니다.

public interface ScannerInterface extends Library { 

    public boolean GetScannerInfo(?); 
      /* ? = They have a pointer of a custom object.What should be passed here 
      */ 

} 

public static void main(String[] args) { 

    ScannerInterface lib = (ScannerInterface) Native.loadLibrary("in64.dll", 
      ScannerInterface.class);   

    System.out.println(lib.GetScannerInfo(?)); 

} 

Win32 함수가 JNA에서 예상하는 매개 변수를 전달하는 방법에 대해 고민하고 있습니다.

public interface ScannerInterface extends Library { 
    public static class ScannerInfo extends Structure { 
     public static class ByReference 
      extends ScannerInfo 
      implements Structure.ByReference {} 

     public int count; 
     public byte[] host_no = new byte[10]; 
     public byte[] scsi_id = new byte[10]; 
    } 

    public int GetScannerInfo(ScannerInfo.ByReference scanner); 
} 

다음과 같이 호출 :

답변

0

당신이처럼 구조체에 매핑되는 Java 클래스 ScannerInfo 정의 할 수 있습니다

ScannerInterface lib = (ScannerInterface) Native.loadLibrary("in64.dll", 
     ScannerInterface.class);   

ScannerInterface.ScannerInfo.ByReference scanner = 
    new ScannerInterface.ScannerInfo.ByReference(); 
int retval = lib.GetScannerInfo(scanner);    
// check retval in case of error 
int count = scanner.count; 
// etc. etc. 
+0

감사 데이비드을, 그것을 시도 할 것이다. –

+0

FWIW, Java 또는 JNA를 사용하지 않습니다. 이 두 가지 소스를 사용하여이 답변을 작성했습니다. https://jna.java.net/javadoc/overview-summary.html http://www.eshayne.com/jnaex/example03.html 매우 유용하다고 생각합니다. . –