Невозможно использовать LVM_GETITEMTEXT без сбоя целевого приложения в C ++ - PullRequest
4 голосов
/ 06 января 2011

Я пытаюсь получить данные из класса SysListView32 (согласно Spy ++) из другого приложения.Отправка сообщения LVM_GETITEMCOUNT этому дескриптору всегда возвращает правильное количество элементов.Есть дочернее окно SysHeader32, которое предположительно содержит заголовки заголовков.

Когда я пытаюсь отправить сообщение LVM_GETITEMTEXT целевому приложению, оно падает.Ниже приведен соответствующий код для этого сообщения:

LPTSTR lpText;
LVITEM* lvItem;
lvItem = new LVITEM;
lvItem->iSubItem = 0;
lvItem->cchTextMax = 255;
lvItem->pszText = lpText;
//SysListViewHandle is the HWND to the SysListView32 'content' window
SendMessage(SysListViewHandle, LVM_GETITEMTEXT, 1, (long)lvItem);

Каждая «ячейка» в списке содержит текст не более 50 символов, поэтому максимальный размер текста должен быть в порядке.

СписокСтруктура, из которой я хочу получить данные, имеет 16 столбцов и переменное количество записей, более 5, поэтому с wParam все должно быть в порядке.В этом списке используются следующие стили: WS_CHILDWINDOW, WS_VISIBLE, WS_TABSTOP, WS_HSCROLL, LVS_REPORT с расширенными стилями WS_EX_LEFT, WS_EX_LTRREADING, WS_EX_RIGHTSCROLLBAR, WS_EX_NOPARENTNOTIFY * в этом случае * LVL LINGданные внутри, поэтому я предположил, что это будет прогулка по парку, чтобы получить использование сообщений, но это доказало, что дело не в этом = / любая помощь будет принята с благодарностью.: Необработанное исключение в 0x77582b87 в applicationname.exe: 0xC0000005: Место записи нарушения прав доступа 0x01bc48b0.Расположение стека вызовов comctl32.dll Разборка: 77582B87 mov dword ptr [esi], 1

1 Ответ

3 голосов
/ 06 января 2011

Ваша проблема в том, что, поскольку представление списка существует в другом процессе, выделенная вами память недопустима в этом другом процессе.Я отсылаю вас к статье в The Code Project , в которой предлагается решение.

Более того, вы, похоже, не выделили памяти для lpText, поэтому она потерпит неудачу в вашем собственном процессе.

...