С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
VV_RIP
9 / 8 / 1
Регистрация: 05.02.2012
Сообщений: 106
1

Создание интерфейсов

28.02.2013, 22:04. Просмотров 1263. Ответов 4
Метки нет (Все метки)

Здравствуйте! В инете нашел статью, в которой описано создание интерфейсов.
http://docwiki.embarcadero.com/RADSt...hi_and_C%2B%2B
И решил попробовать реализовать сие:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#ifndef TMyObjectH
#define TMyObjectH
#include <Classes.hpp>
//---------------------------------------------------------------------------
__interface  INTERFACE_UUID("{D0C74612-9E4D-459A-9304-FACE27E3577D}") IMyObject : public System::IInterface
{
public:
    virtual UnicodeString ToMyString() = 0;
};
typedef System::DelphiInterface<IMyObject> _IMyObject;
//---------------------------------------------------------------------------
class TMyObj : public TCppAggregatedObject<IMyObject>
{
public :
   __fastcall TMyObj(const _di_IInterface Controller) : _AGGREGATED_CLASS(Controller)
   {}
   UnicodeString ToMyString()
   {
       return "ЁЁЁЁЁЁЁ";
   }
};
//---------------------------------------------------------------------------
class TMyObject : public TInterfacedObject
{
private:
    TMyObj *obj;
    IMyObject *iobj;
protected:
    void initAggregatee()
    {
        _IMyObject iobjj;
        GetInterface(iobjj);
        _IMyObject iobjjj;
        (obj = new TMyObj(iobjj))->GetInterface(iobjjj);
        iobj = iobjjj;
    }
public:
    __fastcall TMyObject()
    {
        initAggregatee();
    }
    __fastcall ~TMyObject()
    {
        delete obj;
    }
    __property IMyObject* Object = { read=iobj, implements };
};
//---------------------------------------------------------------------------
#endif
ToMyString просто для примера.
И выпадает ошибка, даже не одна:
[BCC32 Error] TMyObject.h(19): E2312 '_AGGREGATED_CLASS' is not an unambiguous base class of 'TMyObj'
[BCC32 Error] TMyObject.h(20): E2251 Cannot find default constructor to initialize base class 'TCppAggregatedObject<IMyObject,IUnknown,IInterface>'

то бишь проблема в строке:
C++
1
2
   __fastcall TMyObj(const _di_IInterface Controller) : _AGGREGATED_CLASS(Controller)
   {}
Пробовал всячески решить сие, но одна ошибка сменялась другой ... Так что же делать? Тот пример в статье в чистом виде также не работает из-за той же ошибки. Кто-нибудь сталкивался с этим?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:04
Ответы с готовыми решениями:

Создание интерфейсов
здравствуйте , прошу помощи у Вас Форумчан, я изучал язык c# , а теперь пошли...

Создание программных интерфейсов
Здравстуйте всем!!!!!!! У меня бд на оракл 10g, можно ли создать программный...

Создание и реализация интерфейсов
Делаю лабораторную по интерфейсам.. по заданию надо создать два интерфейса,...

Создание интерактивных интерфейсов
Здравствуйте! Подскажите, какие средства используют для создания веб среды,...

Создание графических пользовательских интерфейсов
Всем привет, я только сегодня зарегистрировался, поэтому, если я что-то...

4
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26542 / 17828 / 7051
Регистрация: 22.10.2011
Сообщений: 31,371
Записей в блоге: 6
28.02.2013, 22:30 2
C++
1
2
3
public :
   __fastcall TMyObj(const _di_IInterface Controller) : TCppAggregatedObject<IMyObject>(Controller)
   {}
?
1
VV_RIP
9 / 8 / 1
Регистрация: 05.02.2012
Сообщений: 106
28.02.2013, 23:25  [ТС] 3
Хм, действительно, спасибо) Но теперь правда другая проблема:
C++
1
2
3
4
5
6
7
8
    void initAggregatee()
    {
        _IMyObject iobjj;
        GetInterface(iobjj);
        _IMyObject iobjjj;
        (obj = new TMyObj(iobjj))->GetInterface(iobjjj);
        iobj = iobjjj;
    }
в строчке
C++
1
(obj = new TMyObj(iobjj))->GetInterface(iobjjj);
а точнее при вызове GetInterface(objjj) вылетает EAccessViolation
И можно пояснить смысл этих строк?
Также в примере в статье есть демонстрация работы, у меня должен по идее выполняться такой код:
C++
1
2
3
4
    TMyObject *ptr;
    _IMyObject i_ob;
    if((ptr = new TMyObject())->GetInterface(i_ob))
        wcout<<i_ob->ToMyString().w_str();
Но из-за ошибки он не выполняется ... и здесь опять же функция GetInterface(i_ob), и видимо значение переменной должно как-то измениться или что-то ещё, но ведь i_ob не указатель ... в чем фишка?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26542 / 17828 / 7051
Регистрация: 22.10.2011
Сообщений: 31,371
Записей в блоге: 6
28.02.2013, 23:41 4
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Почему там у тебя дважды _IMyObject? Первый - _di_IInterface должен быть, тогда AV не будет:
C++
1
2
3
4
5
6
7
8
    void initAggregatee()
    {
        /*_IMyObject*/_di_IInterface iobjj;
        GetInterface(iobjj);
        _IMyObject iobjjj;
        (obj = new TMyObj(iobjj))->GetInterface(iobjjj);
        iobj = iobjjj;
    }
1
VV_RIP
9 / 8 / 1
Регистрация: 05.02.2012
Сообщений: 106
01.03.2013, 00:01  [ТС] 5
Точно, и теперь все яснее, благодарю) Эх, пора спать видимо, а то уже явная невнимательность пошла ...
0
01.03.2013, 00:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 00:01

Создание иерархии классов и интерфейсов
Помогите пожалуйста, нужно написать курсач на тему &quot;создание иерархии классов и...

Создание интерфейсов транспортных средств
Создайте три интерфейса, каждый с двумя методами. Наследуйте новый интерфейс от...

Разработка интерфейсов, использование механизма наследования интерфейсов и применение их в программах
Имеется код, необходимо реализовать, и протестировать эти интерфейсы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru