Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2011, 16:11   #11
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

GunSmoker, что то не очень догнал.
Код:
type
 IGetSelf = interface
  function GetObject: TObject;
 end;
 IMyObject = interface
  procedure Do;
 end;
 TMyObject = class(TInterfacedObject,IMyObject,IGetSelf)
  function GetObject: TObject;
  procedure Do;
 end;
Так чтоли?
alexprey вне форума Ответить с цитированием
Старый 10.08.2011, 16:14   #12
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Так.

GUID только присвойте, а то интерфейс не извлечёте.

У библиотеки на руках будет ссылка на IMyObject. Она от него получит IGetSelf, а он даст реализующий объект:

Код:
function TMyObject.GetObject: TObject;
begin
  Result := Self;
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 10.08.2011, 17:12   #13
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Ладно сейчас попробую
alexprey вне форума Ответить с цитированием
Старый 10.08.2011, 17:31   #14
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

так что то опять не понимаю как мне достать объект из IMyObject
с помощью QueryInterface, где в IID указать GUID IGetSelf?
alexprey вне форума Ответить с цитированием
Старый 10.08.2011, 17:42   #15
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

В новых Delphi:

Код:
var
  I: IMyObject;
  O: TMyObject;
begin
  O := (I as IGetSelf).GetObject;
В старых Delphi:

Код:
var
  I: IMyObject;
  G: IGetSelf;
  O: TMyObject;
begin
  if I.QueryInterface(IGetSelf, G) then
    O := G.GetObject;
или:

Код:
var
  I: IMyObject;
  G: IGetSelf;
  O: TMyObject;
begin
  if Supports(I, IGetSelf, G) then
    O := G.GetObject;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 10.08.2011, 18:54   #16
alexprey
Форумчанин
 
Регистрация: 25.05.2010
Сообщений: 169
По умолчанию

Спасибо. Теперь разобрался, ошибку больше не выдает.
alexprey вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе с процедурой Hant111 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.03.2010 20:10
ошибка при работе с указателем Vladss Общие вопросы C/C++ 22 29.07.2009 03:58
Ошибка при работе с компонентой Нюська Компоненты Delphi 12 27.05.2009 00:35
Ошибка при работе с потоками vitalik007 Общие вопросы Delphi 6 09.03.2008 09:25
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10