2012-05-03 3 views
5

인코딩 된 문자열 입력을 받아서 디코딩하는 DLL이 있습니다. DLL은 Codeblocks와 mingw64를 사용하여 Win7 64 비트에서 만들어졌습니다. 혼자 C 코드가 잘 실행되지만 JNA를 통해 while 루프에서 같은 문자열로 실행하면 약 70 %의 호출과 나머지는 올바르지 않게 올바로 디코딩됩니다. 상황을 디버그하고 싶지만 Java 코드가 JNA에 제어 권한을 넘긴 후 어떻게해야하는지 모르겠습니다. 또는 어디에서 볼지에 대한 아이디어도 도움이 될 것입니다. 다음JNA C DLL 디버그 하우투?

C 및 JNA에있어서 서명 전 (이 "Helloworld"를 암호화를 문자열을 경우

Java: int Decrypt_Blk(byte[] expkey, byte[] in, int size, byte[] out); 
C: __declspec (dllexport) int Decrypt_Blk (unsigned char *expkey, unsigned char *in, unsigned int insize, unsigned char *out); 

정확성은, 예를 들면, 출력에 의해 결정된다 내가 들어가 있지 않다이다 암호화 세부 정보가 관련이 없으므로) 암호화 된 출력을이 DLL 메서드에 전달합니다. 10 번 중 7 번 "HelloWorld"가 3 번 발생합니다. 잘못된 문자가 여러 번 나옵니다. 그리고 10 번 모두 동일한 루프에서 동일한 변수를 사용하는 동일한 스레드에 있습니다. 3 개의 잘못된 어커런스 또한 무작위로, 제가 알아 차릴 수있는 유일한 것은 첫 번째 테스트가 내가 테스트 한 것만큼 항상 정확한 것입니다. 그러나 1-10 번의 실행 중 하나라도 잘못된 실행이 발생합니다.

+0

[하단의 링크 확인] (http://web.archive.org/web/20081210024620/http://www.kineteksystems.com/white-papers/mixedjavaandc.html) – user1097489

+0

수술의 정확성? 가장 먼저보아야 할 것은 입력과 출력에서 ​​부호없는 것과 서명 된 사이의 변환 오류입니다. – technomage

+0

API는''exp'' 데이터의 형식과''out'' 버퍼의 크기에 대한 가정을하고 있습니다. – technomage

답변

4

Microsoft Visual C++에서 DLL 프로젝트의 프로젝트 설정에서 디버그 탭을 선택할 수 있습니다. 디버그 세션의 실행 파일로 Java.exe의 전체 경로를 제공하십시오. 인수에 대해서는 Java 응용 프로그램을 실행하기 위해 나머지 명령 행을 제공하십시오. C 코드에서 중단 점을 설정하고 디버그 세션을 시작하십시오. 빌라!