Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.03.2013, 00:42
buhhu_nyx buhhu_nyx вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 2
Репутация: 10
По умолчанию Видимость объектов и их методов

Проблема выплыла не понятно откуда(переносил проект с 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  
Старый 11.03.2013, 02:50
Аватар для BBBCat
BBBCat BBBCat вне форума
Новичок
 
Регистрация: 10.03.2013
Сообщения: 73
Репутация: 10
По умолчанию

К сожалению у меня Delphi 7, но по логике получается, что что-то происходит на месте многоточия
Код:
Function InitApplication:boolean;
begin
...
 Main.CB.Items.Clear; //Tcombobox на главной форме проекта...
Что там такого страшного?
Ответить с цитированием
Этот пользователь сказал Спасибо BBBCat за это полезное сообщение:
buhhu_nyx (11.03.2013)
  #3  
Старый 11.03.2013, 07:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Код:
application.initialize;
application.run;
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 11.03.2013, 09:10
buhhu_nyx buhhu_nyx вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 2
Репутация: 10
По умолчанию

Цитата:
Сообщение от BBBCat
К сожалению у меня Delphi 7, но по логике получается, что что-то происходит на месте многоточия
Код:
Function InitApplication:boolean;
begin
...
 Main.CB.Items.Clear; //Tcombobox на главной форме проекта...
Что там такого страшного?

Вы ПРАВЫ и за это вам респект и большое спасибо.
Выше было вот что:
Код:
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;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025