Главная страница
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.017 c
14-31464
Ru
2003-06-20 15:32
2003.07.10
Русскоязычное описание звуковых библиотек BASS & FMOD


7-31557
Dimaz-z
2003-04-26 20:18
2003.07.10
Как зарегистрировать расширение за своей программой?


3-31159
xxxCrazyManxxx
2003-06-16 09:52
2003.07.10
Подскажите как в проге на делфи проверить конект с MSSQL7


3-31146
sergey32
2003-06-18 14:57
2003.07.10
Ошибка при открытии запроса через ADODataSet


3-31133
Rustik
2003-06-18 11:39
2003.07.10
Подскажите как сформировать массив типа дата начиная с дата1