-1
Winapi EndPaint() 함수가 벨로우즈에 걸려서 그 중 일부가 wm_copydata를 보냈지 만, 그 동안에는 ocassion에 "wm_copydata, variable endpaint_text 주위에 스택이 손상되었습니다 ..." 푹 빠진 앱의 충돌.wm_copydata, 변수 endpaint_text 주위에 스택이 손상되었습니다.
BOOL WINAPI Mine_EndPaint (HWND HWND, CONST PAINTSTRUCT * lpPaint) {
BOOL result = fpEndPaint(hWnd, lpPaint);
if (hWnd == g_win)
{
if (lpPaint->rcPaint.left == g_12x && lpPaint->rcPaint.top == g_12y)
{
painting = 0;
wchar_t endpaint_text[MAX_PATH] = L"deleting_a";
COPYDATASTRUCT cds;
::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.cbData = sizeof(paint_dc);
cds.lpData = endpaint_text;
::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
}
else if (lpPaint->rcPaint.left == g_list12x && lpPaint->rcPaint.top == 137)
{
big_painting = 0;
wchar_t endpaint_text[MAX_PATH] = L"deleting_b";
COPYDATASTRUCT cds;
::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.cbData = sizeof(paint_dc);
cds.lpData = endpaint_text;
::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
}
}
else if (check_d)
{
re_window = NULL;
GetWindowText(hWnd, window_text, MAX_PATH);
if (!wcscmp(window_text, L"Text"))
{
check_d = false;
re_window = hWnd;
wchar_t re_info[MAX_PATH] = L"";
//wcscat(re_info, text);
COPYDATASTRUCT cds;
::ZeroMemory(&cds, sizeof(COPYDATASTRUCT));
cds.dwData = 931;
cds.cbData = sizeof(re_info);
cds.lpData = re_info;
wsprintf(re_info, L"Text='%s', HWND='%X'", d_text, re_window);
::SendMessageTimeoutW(g_main, WM_COPYDATA, (WPARAM)::GetDesktopWindow(), (LPARAM)&cds, SMTO_ABORTIFHUNG, 1000, 0);
}
}
return result;
}
왜 cds.cbData를 sizeof (paint_dc)로 설정하고 있습니까? –
예,하지만 오타가 있습니다. – Marko29