Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 12:07   #91
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Уткин, помоему код генерируемый при конструкторе не изменишь
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 14.05.2010, 12:59   #92
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Уткин, помоему код генерируемый при конструкторе не изменишь
Ну если этого не знать, то можно . За создание всех TObject'ов отвечает
Код:
class function TObject.InitInstance(Instance: Pointer): TObject;
{$IFDEF PUREPASCAL}
var
  IntfTable: PInterfaceTable;
  ClassPtr: TClass;
  I: Integer;
begin
  FillChar(Instance^, InstanceSize, 0);
  PInteger(Instance)^ := Integer(Self);
  ClassPtr := Self;
  while ClassPtr <> nil do
  begin
    IntfTable := ClassPtr.GetInterfaceTable;
    if IntfTable <> nil then
      for I := 0 to IntfTable.EntryCount-1 do
    with IntfTable.Entries[I] do
    begin
      if VTable <> nil then
        PInteger(@PChar(Instance)[IOffset])^ := Integer(VTable);
    end;
    ClassPtr := ClassPtr.ClassParent;
  end;
  Result := Instance;
end;
{$ELSE}
asm
        PUSH    EBX
        PUSH    ESI
        PUSH    EDI
        MOV     EBX,EAX
        MOV     EDI,EDX
        STOSD
        MOV     ECX,[EBX].vmtInstanceSize
        XOR     EAX,EAX
        PUSH    ECX
        SHR     ECX,2
        DEC     ECX
        REP     STOSD
        POP     ECX
        AND     ECX,3
        REP     STOSB
        MOV     EAX,EDX
        MOV     EDX,ESP
@@0:    MOV     ECX,[EBX].vmtIntfTable
        TEST    ECX,ECX
        JE      @@1
        PUSH    ECX
@@1:    MOV     EBX,[EBX].vmtParent
        TEST    EBX,EBX
        JE      @@2
        MOV     EBX,[EBX]
        JMP     @@0
@@2:    CMP     ESP,EDX
        JE      @@5
@@3:    POP     EBX
        MOV     ECX,[EBX].TInterfaceTable.EntryCount
        ADD     EBX,4
@@4:    MOV     ESI,[EBX].TInterfaceEntry.VTable
        TEST    ESI,ESI
        JE      @@4a
        MOV     EDI,[EBX].TInterfaceEntry.IOffset
        MOV     [EAX+EDI],ESI
@@4a:   ADD     EBX,TYPE TInterfaceEntry
        DEC     ECX
        JNE     @@4
        CMP     ESP,EDX
        JNE     @@3
@@5:    POP     EDI
        POP     ESI
        POP     EBX
end;
{$ENDIF}
InitInstance вызывается отсюда:
Код:
class function TObject.NewInstance: TObject;
begin
  Result := InitInstance(_GetMem(InstanceSize));
end;
А Вы наверное купились на
Код:
constructor TObject.Create;
begin
end;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.05.2010 в 13:04.
Utkin вне форума
Старый 14.05.2010, 13:03   #93
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Уткин, я знаю это.
вообще то я про код который генерируется для конструктора(хоть и пусто но он там есть, код я смотрел при пошаговом выполнении по инструкциям проца)
NewInstance выделяет память и инициирует. это я заменил, работает.
еще есть процедура ClassCreate которая собственно и вызывает NewInstance
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 14.05.2010, 13:11   #94
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Ну если Вы внимательно посмотрели, то InitInstance достаточно для создания класса вручную. Именно он и есть основа x:=TObject.Create;
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Старый 14.05.2010, 13:39   #95
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

все равно стековый обьект хреново получается
в стек надо лезть тогда над(стек же снизу вверх) локальными переменными(типа адресов строк там например) и тд...но до адреса возврата...ппц короче%)
в С обычно знаешь как стек выделяется...хотя там и не паришься с этим, но вообще если надо то обьекты можно перенастроить как хочешь, но я думаю что лучше создавать свой класс и переопределить что надо, а не изменять старый
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума
Старый 14.05.2010, 15:44   #96
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

На счёт расширения области применения record: считаю это бредом. Был хороший составной тип данный, а сделали из него те же классы, зачем, если при необходимости и классов хватает?
Вообще, я многие новомодные "фишки" не понимаю.
Arigato вне форума
Старый 14.05.2010, 19:05   #97
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

По моему, если сравнивать с C# (на котором я сейчас и работаю 80% времени). То подход, что "все есть объект/класс" очень хорош. Это дает, главное, управление кодом. Т.е. если какая то критическая ошибка, то в C# try catch спасут всегда, а вот они же в Delphi, C++ не спасут, приложение вылетит с ошибкой. За это собственно (за реализацию такого подхода) я и полюбил C# ( в какой раз, сначала была Delphi 7 ).
Может именно этим аргументируют свои идеи разработчики Delphi, а может я и не прав, но преимущество сразу видно.
BOBAH13 вне форума
Старый 13.10.2010, 02:40   #98
Vikenty
Заслуженный флудер
Участник клуба
 
Аватар для Vikenty
 
Регистрация: 31.03.2010
Сообщений: 1,473
По умолчанию

Недостатки:
1. Не совсем аккуратный код.
2. Неудобная IDE
x. VCL - не считать не достатком
x. Большие exe не считать не достатком.
Достатки
1. Очень удобное и быстрое построение GUI
2. быстрая работа с БД - (BDE)
3. Скомпилированный exe не требует ни каких библеотек
4. в интернете есть много компонентов
Vikenty вне форума
Старый 13.10.2010, 04:08   #99
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Кажется, вам сюда.

Три сотни страниц обсуждения отличий дельфёвых и недельфёвых конструкторов - это если вам своё время девать некуда.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума
Старый 14.10.2010, 02:11   #100
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,865
По умолчанию

Цитата:
Сообщение от Vikenty Посмотреть сообщение
1. Не совсем аккуратный код.
А к Delphi это какое отношение имеет?
Arigato вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чем вам нравиться программирование RIO Свободное общение 31 10.11.2009 12:14
Chart (Delphi). В чем ошибка? Chudo4258 Помощь студентам 2 27.03.2009 05:28
Логотип какого поисковика вам нравится больше? Hallo Свободное общение 7 26.06.2008 09:26
Что тебе нравится геймер? BedDog Свободное общение 19 23.03.2007 08:04