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);
}
다음과 같이 호출 :
감사 데이비드을, 그것을 시도 할 것이다. –
FWIW, Java 또는 JNA를 사용하지 않습니다. 이 두 가지 소스를 사용하여이 답변을 작성했습니다. https://jna.java.net/javadoc/overview-summary.html http://www.eshayne.com/jnaex/example03.html 매우 유용하다고 생각합니다. . –