2009-03-25 6 views
4
으로이 델파이 기능을 매핑 할 방법

나는 다음과 같은 델파이 기능을 가지고 :내가 JNA

function DoX(const InputBuffer: Pointer; const InputBufferSize: longword; OutputBuffer: Pointer; var OutputBufferSize: longword): longbool; 

OutputBuffer 및 OutputBufferSize 여부를 표시하는 부울 수익률 결과의 일부로서 기능에서 설정 될 것입니다 메서드가 성공했습니다 (InputBuffer & OutputBuffer는 바이트 배열입니다).

나는 JNA와 함께 dll에서 필자의 필요한 기능들을 매핑 할 수 있었지만, 이것들은 나에게 문제를주고있다.

답변

5

대부분의 JNA 문서는 당신이 그렇게 그 함수에 C 동등한 시작, C,하지 델파이를 사용하는 가정

int DoX(const void* InputBuffer, 
     unsigned int InputBufferSize, 
     void* OutputBuffer, 
     unsigned int* OutputBufferSize); 

당신은 또한 바로 호출 규칙을 취득 할 수 있습니다. 델파이의 기본값은 입니다. 이것은 아마도 당신이 원하는 것이 아닙니다. stdcall을 대신 사용하십시오. 그게 다른 모든 DLL이 사용하는 것입니다.

Java에 사용 된 것과 동일한 부호없는 유형이 없으므로 서명되지 않은 상태로 시작하십시오. 그러면 InputBufferSizeint이됩니다. 함수가 부울 결과를 반환하므로 반환 유형으로 boolean을 사용하십시오. JNA는 ByReference 클래스의 하위 클래스를 통해 참조를 통해 유형을 전달할 수 있으므로 을 OutputBufferSize으로 사용하십시오.

마지막으로 포인터입니다. 바이트 배열이라고 했으므로 델파이 코드에서 왜 그런 식으로 선언하지 않는지 궁금합니다. PByte을 사용하거나 새로운 PByteArray 유형을 선언하고 사용하십시오. (그 변경은 그 기능을 훨씬 더 편리하게 구현할 것입니다.) 자바에서는 바이트 배열로 선언 해보십시오. 최종 제품 :

boolean DoX(byte[] InputBuffer, 
      int IntputBufferSize, 
      byte[] OutputBuffer, 
      IntByReference OutputBufferSize); 
관련 문제