我正在嘗試編寫一些函數來創建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
您還需要立即調用它,而不是在做其他可能導致其他錯誤的事情之後得到錯誤。你應該有'printf(「無法創建窗口:error =%d \ n」,GetLastError());' – EJP