2014-04-01 1 views
0

JNA를 사용하여 Java에서 C++ 메소드를 호출했습니다. 모든 것이 잘 작동합니다. 이 방법에는 "cout"이 포함되어 있습니다. 내 질문은 이러한 인쇄물을 C++ 메서드에서 Java의 JFrame으로 리디렉션 할 수 있는지 여부입니다. Java 메소드에서는 매우 쉽지만 JNA를 통해 호출되는 메소드가 가능한지 여부는 알 수 없습니다. 좋아, 나는 그것이 이상한 질문 인 것을 안다. 그러나 그것이 가능한지 알고 싶다. 미리 감사드립니다.JNA STDOUT을 JFrame으로 리디렉션

+1

'cout' 스트림을 자바가 읽을 수있는 곳으로 리디렉션해야합니다. 원형 버퍼를 생성자/소비자 포인터와 함께 사용하거나 가장 최근 데이터가있는 Java 콜백 또는 프로세스 간 통신에 공통적 인 다른 방법을 사용할 수 있습니다. 아마도 네이티브 코드로 스트림을 리다이렉트 (redirect)하여 테스트하기 쉽지만, 네이티브 코드를 JNA 호출로 변환 할 수있는 이유는 없습니다. – technomage

+1

'stdout'을 리디렉션하는 한 가지 방법은 http://stackoverflow.com/questions/584868/rerouting-stdin-and-stdout-from-c를 참조하십시오. 파일로 덤프하면 Java에서 파일을 읽을 수 있습니다. JNA는'freopen'을 완벽하게 호출 할 수 있습니다. – technomage

+1

'stdout'의 실제 값을 찾으려면 놀아야 할 수도 있습니다. 시스템의''파일을 참고하십시오. OSX에서는'FILE *'유형의'__stdout'이라는 전역 심볼입니다. 다른 시스템에서는'FILE' 구조체의 전역 배열 안에있는 요소의 주소입니다. – technomage

답변

1

cout 스트림을 Java가 읽을 수있는 곳으로 리디렉션해야합니다. 원형 버퍼를 생성자/소비자 포인터와 함께 사용하거나 가장 최근 데이터가있는 Java 콜백 또는 프로세스 간 통신에 공통적 인 다른 방법을 사용할 수 있습니다. 일 가능성이 높습니다. 스트림을 테스트하기 위해 원시 코드로 쉽게 리디렉션 할 수는 있지만 네이티브 코드를 JNA 호출로 변환 할 수있는 이유가 없습니다.

stdout을 리디렉션하는 한 가지 방법은 Rerouting stdin and stdout from C을 참조하십시오. 파일로 덤프하면 Java에서 파일을 읽을 수 있습니다. JNA는 완벽하게 freemen을 호출 할 수 있습니다.

stdout의 실제 값을 찾으려면 주변을 둘러 봐야 할 수 있습니다. 시스템의 <stdio.h> 파일을 참고하십시오. OSX에서는 FILE* 유형의 __stdout이라는 글로벌 심볼입니다. 다른 시스템에서는 구조체 FILE의 전역 배열에있는 요소의 주소입니다.