Текущий архив: 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