저는 클립 보드 작업을위한 Windows 메시지 전용 창을 만들기위한 몇 가지 함수를 작성하려고합니다. 창을 만들지 못하는 것을 알고 있지만 GetLastError()
함수 호출을 추가하면 함수가 Java로 반환되지 않습니다. 이로 인해 디버깅이 까다로워졌습니다.GetLastError()가 내 메서드를 차단하는 이유는 무엇입니까?
JNIEXPORT jlong JNICALL Java_com_mypackage_ClipboardHelper_initialize
(JNIEnv *env, jclass obj, jstring arg) {
WNDCLASSEXW wc;
ZeroMemory(&wc, sizeof(wc));
wc.cbSize = sizeof(wc);
wc.lpszClassName = _CC_WNDCLASSNAME;
wc.lpfnWndProc = WndProc;
wc.hInstance = GetModuleHandleW(NULL);
if (!RegisterClassExW(&wc)) {
printf("failed to register window class\n");
}
gWindowHandle = CreateWindowExW(WS_EX_OVERLAPPEDWINDOW,
_CC_WNDCLASSNAME,
L"CC clipboard helper window",
0, 0, 0, 0, 0,
HWND_MESSAGE, NULL,
GetModuleHandleW(NULL),
NULL);
if (!gWindowHandle) {
printf("failed to create window\n");
printf(GetLastError()); //this line causes function to never return
printf("\n");
fflush(stdout);
}
return gWindowHandle;
}
저는 Windows 전문가는 아니지만 [GetLastError] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms679360%28v=vs.85%29.aspx) 참조는 다음과 같이 말합니다. : "반환 값은 호출 스레드의 마지막 오류 코드입니다." 이것이 맞다면 문자열이 아니므로'printf'로 넘길 수 없습니다. – kaylum
다른 오류를 일으킬 수있는 다른 작업을 수행 한 후에 오류를 즉시 호출해야합니다. – EJP