아래의 메소드 및 해당 메소드에 대한 단위 테스트. 문제는 Load 메서드의 result 값을 반환 할 수 없다는 것입니다. 아래의 단위 테스트가 실패합니다! JNA Structure ByReference
나는 어디에 내 실수 ... 나는 인스턴스화 .ByReference "없이"LoadResults를 전달하는 시도 있도록 기본 JNA의 객체에 의해 기본적으로하는 ByRef 있다고 생각?@Test
public void testLoad() {
MY_Processor proc = new MY_Processor();
// LoadResults result = new LoadResults();
LoadResults.ByReference result = new LoadResults.ByReference();
ByteByReference [] pathToFile = new ByteByReference[256];
// fill pathToFile out ...
try {
proc.Load (pathToFile, result);
assertEquals(0, result.errorCode);
assertEquals(1, result.elaborationTime);
assertEquals(2, result.coreItem);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Integer Load (ByteByReference[] pathToFile,
LoadResults.ByReference result) throws Exception {
// here result is correctly filled out !
LoadResults result = null;
result = native.getResult (numCore);
}
네이티브 코드가 추가되었습니다.
UPDATE
// header
typedef struct
{
int errorCode;
int elaborationTime;
int coreItem;
} LoadResults;
//[in] path
//[out] result
int Load (char path[MY_BUFFER_DEFINE], LoadResults* result);
// implementation ...
LoadResults* getResult (int numCore)
{
// some check ...
LoadResults *localResult = new LoadResults();
// fill out ...
return localResult;
}
가 네이티브 코드에 의해 노출 된 "무료"방법은하지만
:-) 내 문제에 포커스를 유지하기 위해 보이지 않았다/업데이트
감사합니다!
O.
ByteByReference '[]를'포인터 배열은 :
2) 문제는 부하 방법 I에 다른 하나의 입력에 전달 된 기준을 갱신이었다. 나는 그것이 당신이 찾고있는 것이 아닌지 의심 스럽다. – technomage
문자열을 함수에 전달하려는 경우 Java'String'을 사용하십시오. – technomage
문제는 잘 작동하는 첫 번째 매개 변수 (pathToFile)가 아니지만 두 번째 param (결과)은 출력 매개 변수입니다. – Kasper