![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Проблема выплыла не понятно откуда(переносил проект с Delphi6 на RAD 2009), вот что получается, а точнее не получается. И проект вроде скомпилился без ошибок, но с некоторых пор началась какая-то бяка, я так понял с "видимостью" объектов.
В модуле проекта пытаюсь выполнять инициализацию перед запуском: Код:
Program MyProg; uses Unit1 in 'Unit1.pas' {Main}; Function InitApplication:boolean; begin ... Main.CB.Items.Clear; //Tcombobox на главной форме проекта... ... end; begin Application.CreateForm(TMain, Main); if InitApplication then Application.Run; end. Если метод Clear вызывать без Try except блока, то дебаггер сразу переходит на выход из функции без вывода exception и выполнения всех последующих операций. При блоке Try except получаю EAccessViolation на Read of Address ..., причем этот адрес реальный и он по значению принадлежит моему компоненту CB, расположенному на форме Main. Вопрос: что я делаю не так? Это же все элементарно и должно работать как часы, но я чего-то туплю... Спасибо. З.Ы. следующий код выполняется без ошибок и exception`ов: Код:
begin Application.CreateForm(TMain, Main); Main.CB.Items.Clear; //Tcombobox на главной форме проекта... if InitApplication then Application.Run; end. Последний раз редактировалось buhhu_nyx, 11.03.2013 в 00:52. |
#2
|
||||
|
||||
![]() К сожалению у меня Delphi 7, но по логике получается, что что-то происходит на месте многоточия
Код:
Function InitApplication:boolean; begin ... Main.CB.Items.Clear; //Tcombobox на главной форме проекта... |
Этот пользователь сказал Спасибо BBBCat за это полезное сообщение: | ||
buhhu_nyx (11.03.2013)
|
#3
|
||||
|
||||
![]() Код:
application.initialize; application.run; — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
![]() Цитата:
Вы ПРАВЫ и за это вам респект и большое спасибо. Выше было вот что: Код:
Procedure LocalIPHost; var phe: PHostEnt; Buffer: Pansichar; // array[0..63] of Char; - это работало в Delphi6 ... begin if (WSAStartup($101, GInitData)<>0) then exit; Result := ''; if (GetHostName(Buffer,128)<>0) then exit; phe := GetHostByName(buffer); ... end; Проблема была в типе переменной buffer и вызове 2 функций GetHostName && GetHostByName. Получается я выделял 1 байт памяти на строку для имени компа, понятно что имя получалось подлиннее и происходило наложение на следующие участки памяти полученного имени компа. Глюк вылез именно после перехода на RAD2009. Глюк,к сожалению, у меня ![]() Рабочее решение для моей ситуации следующее: Код:
var phe: PHostEnt; Buffer: array[0..63] of Char; begin if (GetHostName(@Buffer,sizeof(buffer))<>0) then exit; phe := GetHostByName(@buffer); end; |