Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail



Ответ
 
Опции темы
Старый 03.05.2017, 16:20   #1
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 483
Репутация: 101
По умолчанию код выполняется, но приводит к ошибке в другом месте

Здравствуйте.
Несколько дней дебажил проект плеера. Не мог найти, из-за чего он крашится.
Сегодня, наконец-то , докопался до этого:
Код:


function GetWindowText(w:hwnd):string;
var
  p : pchar;
  n : integer;
begin
  if w>0 then
  begin
    n := GetWindowTextLength(w)+1;
    getmem(p,n);
    if Winapi.Windows.GetWindowText(w,p,n)>0 then
    setstring(result,p,n-1) else
    result := '';
    freemem(p,n);
  end else
  result := '';
end;

Сам код нормально срабатывает, но если далее попытаться прочитать XML (TXMLDocument), то возникает ошибка:


Если не читать XML, то где-то в другом месте программы возникнет другая ошибка. Если закомментировать код, приводящий ко второй ошибке, то еще другая ошибка возникнет еще где-нибудь и т.д. Иногда вообще показывает на TInterfaceList, хотя в моём коде я этот класс нигде не использую.
Если не вызывать GetWindowText(), то никаких ошибок нет.
Delphi XE10 Seattle.

Последний раз редактировалось BLACK_RAIN; 03.05.2017 в 16:26.
BLACK_RAIN вне форума   Ответить с цитированием
Старый 03.05.2017, 17:13   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 10,402
Репутация: 1609

icq: 216409213
По умолчанию

GetMem выделяет в БАЙТАХ, n у вас в СИМВОЛАХ... А вообще так и бывает, если с памятью неаккуратно.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x вне форума   Ответить с цитированием
Старый 03.05.2017, 17:26   #3
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 483
Репутация: 101
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
GetMem выделяет в БАЙТАХ, n у вас в СИМВОЛАХ
то есть, на 2 умножить?
BLACK_RAIN вне форума   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Код выполняется не по порядку Серёга Русич Общие вопросы Delphi 3 12.02.2017 21:29
Present у LPDIRECT3DSWAPCHAIN9 приводит к ошибке Kukurudza Visual C++ 1 20.05.2013 13:14
Баг стандартного ввода? Или как мой бесстыжий код приводит к синему экрану смерти _Bers Общие вопросы C/C++ 11 02.01.2012 16:34
новое окно Эксель в другом месте ShamanK Microsoft Office Excel 6 02.12.2009 16:16
как в другом месте программы вызвать case 0? student_) Общие вопросы по Java, Java SE, Kotlin 9 11.10.2008 13:55




13:43.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru