2012-06-09 67 views
-1

我迷戀Winapi EndPaint()函數波紋管和它的內部我發送一些wm_copydata但同時在ocassion我得到「wm_copydata,圍繞變量endpaint_text堆棧已損壞...」掛鉤的應用程序的崩潰。wm_copydata,堆棧周圍變量endpaint_text已損壞

BOOL WINAPI Mine_EndPaint(HWND的HWND,常量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; 

} 
+2

爲什麼將cds.cbData設置爲sizeof(paint_dc)? –

+0

是的,但這是錯字 – Marko29

回答

0

據溢出wsprint,沒有必須與其所提到損壞VAR什麼關係。

相關問題