GetWindowText () в Win32 C ++ не работает - PullRequest
0 голосов
/ 29 декабря 2011

Выполнение проекта, в котором я извлекаю текст из элемента управления edittext в моем окне, и функция GetWindowText () не может прочитать в буфер и возвращает 0, однако вызов SetWindowText () для того же элемента управления работает отличноКак при инициализации окна, так и при возникновении других событий (при нажатии флажков и т. д.). Не уверен, что является причиной сбоя при чтении данных, соответствующий код размещен ниже:

#define IDC_SOPRANO_H 1788
INT_PTR CALLBACK    Rules(HWND, UINT, WPARAM, LPARAM);
LPSTR SOP_HIGH_NOTE = "A#4";
INT_PTR CALLBACK Rules(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND SOP_HIGH_NOTE_HWND = GetDlgItem(hDlg, IDC_SOPRANO_H);
    switch (message)
    {
    case WM_INITDIALOG:
        SetWindowText(SOP_HIGH_NOTE_HWND, SOP_HIGH_NOTE);
        return (INT_PTR)TRUE;
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case IDOK:
            GetWindowText(SOP_HIGH_NOTE_HWND, SOP_HIGH_NOTE, 4);
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
}

1 Ответ

2 голосов
/ 29 декабря 2011

SOP_HIGH_NOTE - это указатель, а не выделенный буфер.Вы объявляете, что он изначально указывает на строковый литерал, который существует в данных процесса, доступных только для чтения.Передача этого указателя в GetWindowText() попытается выполнить запись в этот блок постоянной памяти.

Попробуйте вместо этого:

TCHAR SOP_HIGH_NOTE[] = TEXT("A#4");

, который объявляет фактический буфер чтения / записи в памяти ипредварительно заполняет его содержимым строкового литерала, а не указывает на адрес памяти самого литерала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...