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

Вниз

Что будет если...   Найти похожие ветки 

 
jack128_   (2014-03-19 22:17) [40]


> нельзя наследовать реализацию интерфейсов родительского
> объекта

э-э-э. В смысле?? На дельфи можешь описать что ты имеешь в виду?


 
Dimka Maslov ©   (2014-03-20 12:37) [41]

Я пишу
class CInterfacedObject : public IUnknown
{
public:
  HRESULT __stdcall QueryInterface(GUID guid, void** Obj);
  ULONG   __stdcall AddRef();
  ULONG  __stdcall Release();
};

или же
TInterfacedObject = class (TObject, IUnknown)
public
  function QueryInterface(Guid: TGUID; out Obj): HRESULT stdcall;
  function _AddRef: ULONG stdcall;
  function _Release: ULONG stdcall;
end;

всё прекрасно. Потом у меня есть
__interface ISomeInterface : public IUnknown
{
   void __stdcall Method();
};

и
 ISomeInterface = interface(IUnknown)
   procedure Method; stdcall;
 end;

и я хочу реализовать ISomeInterface в классе-наследнике CInterfacedObject/TInterfacedObject. Написав
class CSomeInterface : public CInterfacedObject, public ISomeInterface
{
  void __stdcall Method();
};

я получаю абшибко: а скакого ты тут мне про QueryInterface, AddRef и Release не пишешь, дорогой! Множественное наследование же. Приходится каждый раз писать.

В Delphi я спокойно напишу
TSomeInterface = class (TInterfacedObject, ISomeInterface)
и реализация методов IUnknown у меня уже будет готова и унаследована из TInterfacedObject...


 
jack128_   (2014-03-20 13:57) [42]

Твой код даже в дельфе не скомпилируется, ну и в плюсах естественно тоже.
Так что убоги не Си, а ты.


 
Dimka Maslov ©   (2014-03-20 14:29) [43]

Согласен, сишный код в delphe не скомпилируется никогда, а сишный код в С++ 10 лет успешно компилируется, так кто тогда тут убогий?


 
jack128_   (2014-03-20 14:41) [44]


> TInterfacedObject = class (TObject, IUnknown)
> public
>   function QueryInterface(Guid: TGUID; out Obj): HRESULT
> stdcall;
>   function _AddRef: ULONG stdcall;
>   function _Release: ULONG stdcall;
> end;

вот этот код в дельфе не скомпилируется. Это тоже сишный код?


 
clickmaker ©   (2014-03-20 14:48) [45]

> я получаю абшибко: а скакого ты тут мне про QueryInterface,
> AddRef и Release не пишешь, дорогой

так это ж вроде стандартная фишка COM: каждый класс реализует IUnknown сам


 
jack128_   (2014-03-20 14:51) [46]


> так это ж вроде стандартная фишка COM: каждый класс реализует
> IUnknown сам

хм. в дельфе обычно все наследуются от TInterfacedObject"а. Почему в других языках должно быть по другому?


 
KSergey ©   (2014-03-20 16:07) [47]

> Dimka Maslov ©   (15.03.14 15:59) [16]
> надо лишь п р о в
> е р и т ь, что полученный указатель на интерфейс реализован
> в модуле, разработанном на Delphi.

Это невозможно.
Только сделать спец. интерфейс, по которому можно спросить "ты кто" - и довериться присланному ответу.

Есть вариант: найти dll, в которой реализован интерфейс, и по разным признакам установить использовавшийся компилятор. Это вполне реально и работоспособно, знать бы только - зачем.


 
Dimka Maslov ©   (2014-03-20 19:58) [48]


>
> вот этот код в дельфе не скомпилируется


С какой это радости не скомпилируется? Ну да, если реализацию не прописать - тогда не скомпилируется точно.


> так это ж вроде стандартная фишка COM: каждый класс реализует
> IUnknown сам


Если унаследовать что-то от обычного абстрактного класса - та же фигня получится, С++ не делает разницы между интерфейсом и абстрактным классом.


 
Dimka Maslov ©   (2014-03-20 20:00) [49]


> хм. в дельфе обычно все наследуются от TInterfacedObject"а.
>  Почему в других языках должно быть по другому?


Потому-то это д р у г и е языки. В которых возможно множественное наследование. Чтобы избежать конфликтов, такая штука с TInterfacedObject не канает.


>
> Это невозможно.
> Только сделать спец. интерфейс, по которому можно спросить
> "ты кто" - и довериться присланному ответу.


Вполне возможно. И пока тут идёт разглагольствование - уже давно всё сделано. И, главно, зачем - выше всё написано.


 
jack128_   (2014-03-20 21:21) [50]

Удалено модератором


 
Dimka Maslov ©   (2014-03-20 21:53) [51]

Удалено модератором


 
jack128_   (2014-03-20 22:09) [52]

Удалено модератором
Примечание: Вежливость прежде всего



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

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

Наверх




Память: 0.56 MB
Время: 0.008 c
4-1269854506
QAZ
2010-03-29 13:21
2014.10.26
иконка по расширению


2-1383329935
dmitryl
2013-11-01 22:18
2014.10.26
dbisam


15-1394821001
MS-DOS user
2014-03-14 22:16
2014.10.26
Сервис int 21h/0Ah, шаблоны


15-1395378240
KSergey
2014-03-21 09:04
2014.10.26
Всплеск формирования доменных зон первого уровня


15-1394643206
HITMAN
2014-03-12 20:53
2014.10.26
Помогите разработать алгоритм проверки поля в LINES