Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Просвятите на что содержит ссылку переменная типа Interface   Найти похожие ветки 

 
Serginio   (2003-06-26 15:07) [0]

С преременными типа класса (Self) все понятно. Они содержат ссылку на область памяти (Структуру) данных объекта, первые 4 байта которых содержат ссылку на VMT.

Понятно, что переменная типа интерфейс должна ссылаться на структуру аналогичную TMethod типа
TIntfRecord = Record
Code:Pointer;// ссылка на VMT интерфейса
Data:Pointer;// ссылка на данные объекта
end;
или какието другие аналоги.
Просвятие. Заранее благодарен.


 
icWasya ©   (2003-06-26 15:32) [1]

поскольку переменная Interface не может содежать данные, то всё гораздо проще -
TIntfRecord = Pointer;// ссылка на VMT интерфейса

P + 0 - указатель на QueryInterface
P + 4 - указатель на AddRef
P + 8 - указатель на Release
P +12 - остальные методы


 
Serginio   (2003-06-26 15:55) [2]

2(icWasya © (26.06.03 15:32)) Интефейс без класса не сущесвует. Просто должна быть ссылка на данные что бы вызвать метод класса. Очень плохо знаю Ассемблер, Да может у меня в глазах, что то но вызывается Call dword ptr [p+12] c нечетным адресом.


 
Skier ©   (2003-06-26 16:04) [3]

см.
class function GetInterfaceEntry(const IID: TGUID): PInterfaceEntry;
class function GetInterfaceTable: PInterfaceTable;


 
Serginio   (2003-06-26 16:35) [4]

Спасибо Skir
TInterfaceEntry = packed record
IID: TGUID;
VTable: Pointer;
IOffset: Integer;
ImplGetter: Integer;
end;

Теперь осталось разобраться с
IOffset: Integer;
ImplGetter: Integer;

Я обязательно поэксперементирую, но хотелось бы узнать компетентное мнение.


 
Skier ©   (2003-06-26 16:39) [5]

Encapsulates the information needed to dispatch interface calls.

Unit

system

type
PInterfaceEntry = ^TInterfaceEntry;

TInterfaceEntry = packed record
IID: TGUID;
VTable: Pointer;
IOffset: Integer;
ImplGetter: Integer;

end;

Description

PInterfaceEntry is a pointer to a TInterfaceEntry record.

TInterfaceEntry contains the following fields:

IID: The GUID that uniquely identifies the interface.
VTable: The VTable to use for dispatching interface calls.
IOffset The offset of the interface in the implementing object.
ImplGetter A method pointer for accessing the interface if IOffset is not available.


 
Serginio   (2003-06-26 18:19) [6]

Все разобрался Self+IOffset это ссылка на заглушку которая подготавливает вызов метода класса. Только почему то с нечетным адресом. Не совсем рациональный подход Мое личное мнение.


 
Serginio   (2003-06-26 18:21) [7]

Вернее Self+IOffset ссылка на VMT заглушек реализующие реальные методы Класса.



Страницы: 1 вся ветка

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
3-31163
Step[B.M.]
2003-06-19 09:04
2003.07.10
Снова об ADO и Excel


9-31069
Кен
2003-01-12 03:37
2003.07.10
Как в glscene писать русским шрифтом ? Или хотя бы где взять русс


14-31507
MakNik
2003-06-25 09:56
2003.07.10
UnInstall


4-31567
Deus
2003-05-11 16:50
2003.07.10
Центральное выравнивание у Messagebox


3-31113
rosl
2003-06-17 05:57
2003.07.10
копирование данных в excel