![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как "динамический" вызать конструктор? [D7, WinXP]
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.