C# Windows Form GUI를 Java Swing GUI로 변환하는 작업이 제공되었습니다. C로 작성된 동일한 라이브러리를 사용해야합니다. 라이브러리의 함수 중 하나는 C 프로그램을 창에 연결할 수 있도록 창의 기본 핸들을 필요로합니다. C# 코드에서 네이티브 핸들의 사용은 상당히 간단하며 Intptr
이 함수에 전달됩니다. 자바에서는 다른 이야기입니다. JNA (Java Native Access) 및 HWND
네이티브 핸들 표현을 사용하여 창 핸들을 얻는 방법을 찾았습니다. 문제는 내가 HWND
을 사용하여 핸들에 잘못된 메모리 액세스 예외가 발생할 때마다 나타납니다. 여기에 제가 사용하고있는 코드가 있습니다.Java 프로그램에서 HWND를 C 라이브러리로 전달
메인 클래스 :
public class main {
public static void main(String[] args) {
JFrame jFrame = new JFrame();
jFrame.setSize(5000,5000);
jFrame.setVisible(true);
final HWND ptrRef = new HWND(Native.getComponentPointer(jFrame));
CLibrary cl = CLibrary.INSTANCE;
System.out.println("Handle: "+ptrRef);
String sPath = "C:\\Users\\markm\\IdeaProjects\\JFrameHandle\\Release";
cl.clStart(ptrRef, sPath, true);
}
}
CLibrary 인터페이스 : 그에 액세스 할 수 있습니다 전에
public interface CLibrary extends Library {
Clibrary INSTANCE = (CLibrary) Native.loadLibrary("C:\\Users\\markm\\IdeaProjects\\JFrameHandle\\Release\\clibrary",CLibrary.class);
void clStart(HWND parent, String libraryPath, boolean hidePanel);
}
불행하게도 나는 단지 .dll 파일이 있기 때문에 C 코드에 액세스 할 수 있지만하지 않습니다 코드 내 부분에 뭔가 잘못되어 있는지 알고 싶습니다. 누군가가 창 핸들을 사용하는 방법에 대한 올바른 방향으로 나를 가리킬 수 있거나 다른 쪽 끝의 JNI를 통해 핸들을 전달할 수있는 방법이 있다면 내가 얻을 수있는 모든 도움을 사용할 수 있다는 의견을 말하십시오.
미리 감사드립니다.
이 C 라이브러리는 관리되는 런타임에서 소유 한 GUI 창을 직접 조작해야한다고 생각합니까? – chrylis
dll을 사용하고 있으므로 Windows OS에 효과적으로 묶여 있습니다. 재 작성의 요점은 무엇입니까? – Amit
@chrylis - C 라이브러리가 기본 창에 '창'을 넣고 있습니다. 그게 내가 포인트 레퍼런스를 가지고 있도록 라이브러리에 메인 윈도우의 핸들을 전달하려고하는 이유입니다. –