Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как "динамический" вызать конструктор? [D7, WinXP]


Страницы:   1 2 3 4 5

zamtmn ©   (2006-07-31 14:34:00) 

Никак не получается "динамически" вызвать конструктор для object`a. Делаю чтото вроде вотэтого:

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils;
type
   testobj=object
                 constructor init;
           end;
   SimpleProcOfObj=procedure of object;
var obj:testobj;
   tm:tmethod;
constructor testobj.init;
begin
    writeln('init;')
end;
begin
    tm.Code:=@testobj.init;
    tm.Data:=@obj;
    SimpleProcOfObj(tm);
    writeln('end.');
    readln;
end.

На FPC всё компилится и работает, на DELPHI7 никак. если constructor заменить на procedure то все работает, но нужно именно конструктор - чтоб VMT проинициализировалась:(


tesseract   (2006-07-31 15:29:00) [81]


> чето мне кажется что ты не понял что мне надо


Ты и не сказал, опиши проблему.


tesseract   (2006-07-31 15:29:00) [82]


> zamtmn   (31.07.06 15:25) [8]


нету его Delphi не паскаль, виртуальные методы объявляються дописыванием Virtual в конце.

Классы только динамические.


zamtmn   (2006-07-31 15:28:00) [83]

>>Учить теорию срочно
ну уж если посылаешь в учебники, то ткни носом что именно.
чето мне кажется что ты не понял что мне надо


zamtmn   (2006-07-31 15:25:00) [84]

мне OLE ненужно:)
мне нужен старый добрый BP7 object, понимаю что щас классы в моде, но жизнь заставила:)
Имею выделенную под object память, проинициализированные поля, нужно вызвать пустой конструктор без ассемблерных хаков, чтоб можнобыло пользоваться виртуальными методами


tesseract   (2006-07-31 15:18:00) [85]


> zamtmn   (31.07.06 15:11) [5]


Учить теорию срочно.


StriderMan   (2006-07-31 15:18:00) [86]

предлагаю почитать хелп по ключевому слову object

The object interface attribute identifies a custom OLE interface. An interface attribute list that does not include the object attribute indicates a DCE RPC interface. An interface attribute list for an OLE interface must include the uuid attribute, but it cannot include the version attribute.


zamtmn   (2006-07-31 15:11:00) [87]

>может быть testobj = class?
нет object
>надеюсь tm.code имеет тип tTestobj
tm.code это pointer
tmethod - определен в дельфовском system.pas
>Create возвратит тебе ссылку на объект
мне недадо его креатить, он уже создан, и он не класс а обжект, нужно проинициализировать VMT


StriderMan   (2006-07-31 15:01:00) [88]


> где @?

а зачем "@"?

читай основы Делфи.


>   testobj=object

может быть testobj = class?


tesseract   (2006-07-31 14:56:00) [89]


> zamtmn   (31.07.06 14:52) [2]


надеюсь tm.code имеет тип tTestobj.

тогда заработает. Create возвратит тебе ссылку на объект.


zamtmn   (2006-07-31 14:52:00) [90]

Чето невъехал. почему?

  tm.Code:=Ttestobj.Create;
  tm.Data:=obj;

где @?
всеравно неробит


tesseract   (2006-07-31 14:39:00) [91]

testobj=object
         public
                constructor Create;
          end;
  SimpleProcOfObj=procedure of object;
var obj:testobj;
  tm:tmethod;
constructor testobj.Create;
begin
   inherited create;
   writeln('init;')
end;
begin
    tm.Code:=Ttestobj.Create;
   tm.Data:=obj;
   SimpleProcOfObj(tm);
   writeln('end.');
   readln;
end.


Страницы:   1 2 3 4 5

Наверх

Титульная страница Поиск, карта сайта Написать письмо