Форум: "Основная";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизПросвятите на что содержит ссылку переменная типа 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c