Форум: "Основная";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];
ВнизInterface и указатель Найти похожие ветки
← →
NDelphist (2002-04-04 19:57) [9]Aга, вижу что-то похожее на правду, наконец! :)
>Как известно, указатель есть переменная содержая адрес ячейки
> памяти, безотносительно тому, что содержится в этой ячейке.
>Переменная процедурного типа - тоже указатель, но указывает он
>на точку входа в конкретную процедуру.
>Указатель на интерфейс - есть указатель на таблицу методов
>интерфейса, перым членом которой является указатель на метод >QueryInterface.
Спасибо, но это я, конечно же, знаю, иначе бы я так и не
пробывал бы делать.
>метод function (Self: IMyInterface; const IID: TGUID; out Obj):
>HResult stdcall; ты же присваиваешь адрес этой процедуры
>переменной, которая ссылается на процедуру function (IID:
>TGUID; out Obj): LongInt register;.
А вот это вот уже похоже на правду. Ну, допустим, stdcall нам подставить не тяжело - это не причина. Логично, что первым аргументом пытается передаться указатель на экземпляр вызывающей стороны. Тогда как начет этого:
type
SomeI=packed record
QI:function (IID:TGUID; out Obj):Longint; stdcall;
AddRef:function:LongInt; stdcall;
Release:function:LongInt; stdcall;
end;
var
p:^SomeI;
begin
...
<>.QueryInterface(IID,p);
p^.QI(IID,p1);
?
А во! Дошло. Надо вместо record класс использовать. А то record"ы в паскале не такие развитые как в С++, тут он наверняка просто разиминуется и получится тоже, что и в начале.
Obj:=TMyClass.Create;
try
Obj.GetInterface(IMyInterface, Ifc);
// Делаешь все что захочешь с Ifc, но всё равно вызывать Ifc._Release не надо
finally
Obj.Free;
end;
Вот это вот мне все равно не нравиться. То, что Delphi вызывает Realese за меня - это конечно очень любезно с его стороны, однако может выроботать плохую привычку. Во некоторых распространненых средах (VC++) такие вещи, понятно что, не делаются.
Спасибо Dimka! А то я возможно бы так еще долго тормозил. :)
P.S. renoid вроде как правильно сказал, но как-то не понятно, то ли он имеет ввиду.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.18;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c