대부분의 JNA 문서는 당신이 그렇게 그 함수에 C 동등한 시작, C,하지 델파이를 사용하는 가정
int DoX(const void* InputBuffer,
unsigned int InputBufferSize,
void* OutputBuffer,
unsigned int* OutputBufferSize);
당신은 또한 바로 호출 규칙을 취득 할 수 있습니다. 델파이의 기본값은 입니다. 이것은 아마도 당신이 원하는 것이 아닙니다. stdcall을 대신 사용하십시오. 그게 다른 모든 DLL이 사용하는 것입니다.
Java에 사용 된 것과 동일한 부호없는 유형이 없으므로 서명되지 않은 상태로 시작하십시오. 그러면 InputBufferSize
은 int
이됩니다. 함수가 부울 결과를 반환하므로 반환 유형으로 boolean
을 사용하십시오. JNA는 ByReference
클래스의 하위 클래스를 통해 참조를 통해 유형을 전달할 수 있으므로 을 OutputBufferSize
으로 사용하십시오.
마지막으로 포인터입니다. 바이트 배열이라고 했으므로 델파이 코드에서 왜 그런 식으로 선언하지 않는지 궁금합니다. PByte
을 사용하거나 새로운 PByteArray
유형을 선언하고 사용하십시오. (그 변경은 그 기능을 훨씬 더 편리하게 구현할 것입니다.) 자바에서는 바이트 배열로 선언 해보십시오. 최종 제품 :
boolean DoX(byte[] InputBuffer,
int IntputBufferSize,
byte[] OutputBuffer,
IntByReference OutputBufferSize);