Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Идентификаторы интерфейсов - C++

13.07.2015, 12:14. Просмотров 358. Ответов 4
Метки нет (Все метки)

Есть код что он означает
C++
1
2
3
4
5
6
static const IID IID_IMotion=
{0x692d03a4,0xc689,0x11ce,{0xb3,0x37,0x88,0xae,0x36,0xde,0x9e,0x4e}};
 
//{692D0eA5-C689-11CE-B337-88EA36DE9E4E}
static const IID IID_IVisual=
{0x692d03a5,0xc689,0x11ce,{0xb3,0x37,0x88,0xea,0x36,0xde,0x9e,0x4e}};
Что они означают? Это заполняется какими то числами структура
И идентификаторы интерфейсов получаются и зачем они нужны?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2015, 12:14     Идентификаторы интерфейсов
Посмотрите здесь:

Правильные идентификаторы C++
C++ Какие здесь идентификаторы?
Вложенные циклы и необъявленные идентификаторы C++
NetBeans C/C++ ругается на идентификаторы из системных библиотек C++
C++ Подсветить другим цветом идентификаторы
C++ Какую роль выполняют идентификаторы в приведенном коде?
Идентификаторы списка в качестве аргументов функции C++
C++ Ошибка: Необъявленные идентификаторы
C++ Идентификаторы: createHanningWindow и phaseCorrelate не найдены
Ошибка: неопределенные идентификаторы C++
Неопределенные идентификаторы в матрице C++
Глобальные идентификаторы GUID C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
13.07.2015, 12:40     Идентификаторы интерфейсов #2
Похоже на это: https://msdn.microsoft.com/en-us/lib.../cc815892.aspx
https://msdn.microsoft.com/en-us/lib.../cc839904.aspx
rikimaru2013
C++ Game Dev
2379 / 1073 / 235
Регистрация: 30.11.2013
Сообщений: 3,563
13.07.2015, 12:53     Идентификаторы интерфейсов #3
C++
1
Visual Studio -> Tools -> Create GUID
ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
13.07.2015, 14:16  [ТС]     Идентификаторы интерфейсов #4
Да это это, только как они номер //{692D0eA5-C689-11CE-B337-88EA36DE9E4E}
перевели в такой вид?
static const IID IID_IVisual=
{0x692d03a5,0xc689,0x11ce,{0xb3,0x37,0x88,0xea,0x36,0xde,0x9e,0x4e}};

И откуда они вообще взяли этот номер на фанарь придумали? Это типо создаются идентификаторы интерфейсов в COM DLL или хз. что это.

Добавлено через 3 минуты
Щас приведу пример COM модели MFC простой где будет этот идентификатор. Только я не знаю как его запустить и проверить. Вообще там должна COM DLL создаваться, а я его в консольном приложении создаю, ну оно должно все рамно наверно работать.

Добавлено через 44 минуты
Вот код с примером класса COM MFC, я его просто пытаюсь в консольном приложении вызвать и ничего не вызывается.
Кликните здесь для просмотра всего текста
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
using std::cout;
#include <afxwin.h>
 
//идентификаторы интерфейсов
//{692D03A-C689-11CE-B337-88EA36DE9E4E}
static const IID IID_IOne=
{0x692d03a4,0xc689,0x11ce,{0xb3,0x37,0x88,0xae,0x36,0xde,0x9e,0x4e}};
 
//{692D0eA5-C689-11CE-B337-88EA36DE9E4E}
static const IID IID_ITwo=
{0x692d03a5,0xc689,0x11ce,{0xb3,0x37,0x88,0xea,0x36,0xde,0x9e,0x4e}};
 
//------Интерфейсы COM-----
struct IOne : public IUnknown
{
    STDMETHOD_(void,One_Print)()=0;
};
struct ITwo : public IUnknown
{
    STDMETHOD_(void,Two_Print)()=0;
};
 
//-----Сам объект COM-----
class CMy_COM : public CCmdTarget
{
private:
    int m_pOne;
    int m_pTwo;
protected:
    CMy_COM():m_pOne(10),m_pTwo(20){TRACE("CMy_COM\n");}
    virtual ~CMy_COM(){TRACE("~CMy_COM\n");}
 
    //для динамического создания
    DECLARE_DYNCREATE(CMy_COM)
 
    //создаем вложеные классы интерфейсы
    //XOne m_xOne
    BEGIN_INTERFACE_PART(One,IOne)
        STDMETHOD_(void,One_Print)();
    END_INTERFACE_PART(One)
    
    //XTwo m_xTwo
    BEGIN_INTERFACE_PART(Two,ITwo)
        STDMETHOD_(void,Two_Print)();
    END_INTERFACE_PART(Two)
};
 
IMPLEMENT_DYNCREATE(CMy_COM,CCmdTarget)
 
//-----------определение функций интерфейсов-------
//---IOne
//1.Стандарт из IUnknown
STDMETHODIMP_(ULONG) CMy_COM::XOne::AddRef()
{
    TRACE("CMy_COM::XOne::AddRef\n");
    METHOD_PROLOGUE(CMy_COM,One)
    return pThis->ExternalAddRef();
}
 
STDMETHODIMP_(ULONG) CMy_COM::XOne::Release()
{
    TRACE("CMy_COM::XOne::Release\n");
    METHOD_PROLOGUE(CMy_COM,One)
    return pThis->ExternalRelease();
}
 
STDMETHODIMP CMy_COM::XOne::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    TRACE("CMy_COM::XOne::QueryInterface iid=%d", iid);
    METHOD_PROLOGUE(CMy_COM,One)
    return pThis->ExternalQueryInterface(&iid,ppvObj);
}
 
//2. собственная функция
STDMETHODIMP_(void) CMy_COM::XOne::One_Print()
{
    TRACE("CSpaceship::XMotion::Fly\n");
    METHOD_PROLOGUE(CMy_COM,One)
    TRACE("m_pOne=%d\n",pThis->m_pOne);
    return;
}
 
//-----ITwo-----
//1.Стандарт из IUnknown
STDMETHODIMP_(ULONG) CMy_COM::XTwo::AddRef()
{
    TRACE("CMy_COM::XOne::AddRef\n");
    METHOD_PROLOGUE(CMy_COM,Two)
    return pThis->ExternalAddRef();
}
 
STDMETHODIMP_(ULONG) CMy_COM::XTwo::Release()
{
    TRACE("CMy_COM::XOne::Release\n");
    METHOD_PROLOGUE(CMy_COM,Two)
    return pThis->ExternalRelease();
}
 
STDMETHODIMP CMy_COM::XTwo::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    TRACE("CMy_COM::XOne::QueryInterface iid=%d", iid);
    METHOD_PROLOGUE(CMy_COM,Two)
    return pThis->ExternalQueryInterface(&iid,ppvObj);
}
 
//2. собственная функция
STDMETHODIMP_(void) CMy_COM::XTwo::Two_Print()
{
    TRACE("CMy_COM::XTwo::Two_Print\n");
    METHOD_PROLOGUE(CMy_COM,Two)
    TRACE("m_pTwo=%d\n",pThis->m_pTwo);
    return;
}
 
 
int main()
{
    cout <<"COM-klient\r\n";
 
    IUnknown* pIUnk=nullptr;
    IOne* pIOne=nullptr;
    ITwo* pITwo=nullptr;
 
    CMy_COM* p = (CMy_COM*)CMy_COM::CreateObject();
    pIUnk=&p->m_xOne;
    
    //передаем идентификатор интерфейса и получаем интерфейс
    pIUnk->QueryInterface(IID_IOne,(void**)&pITwo);
    
    if(pITwo==nullptr){cout <<"ne naideno\r\n";}
    else
    {
        pITwo->QueryInterface(IID_ITwo,(void**)&pIOne);
        pITwo->Two_Print();
    }
    if(pIOne==nullptr){cout <<"ne naideno\r\n";}
    else{pIOne->One_Print();}
    
    if(pIUnk!=nullptr)pIUnk->Release();
    if(pIOne!=nullptr)pIOne->Release();
    if(pITwo!=nullptr)pITwo->Release();
 
    cout <<"end COM-klient\r\n";
    return 0;
}

и есть там два идентификатора, где брать эти номера для идентификаторов? И что это за код? Это вообще типо MFC DLL должно создаваться и типо номер этот в регистр добавляется и потом загружается. Что то я запутался с этим ком и ничего он не работает. Оно наверно не будет работать так да? Чтобы работало нужно DLL создавать, регистрировать его и затем уже в клиенте запускать и использовать QueryInterface да? Как вообще номер этот придумали? Его что от фанаря взяли?

Добавлено через 1 минуту
Где брать эти номера кто знает????
C++
1
2
3
4
5
6
7
8
//идентификаторы интерфейсов
//{692D03A-C689-11CE-B337-88EA36DE9E4E}
static const IID IID_IOne=
{0x692d03a4,0xc689,0x11ce,{0xb3,0x37,0x88,0xae,0x36,0xde,0x9e,0x4e}};
 
//{692D0eA5-C689-11CE-B337-88EA36DE9E4E}
static const IID IID_ITwo=
{0x692d03a5,0xc689,0x11ce,{0xb3,0x37,0x88,0xea,0x36,0xde,0x9e,0x4e}};
Добавлено через 52 секунды
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
Visual Studio -> Tools -> Create GUID
А что это ты за путь показал? это там есть такая прога которая номера создает? , щас посмотрю.

Добавлено через 3 минуты
rikimaru2013, ну да нашел где генерируется этот номер, там утилита есть "Создание GUID"

Добавлено через 27 минут
Есть такие кто создавал элементы ActiveX свои для MFC????
Nick Alte
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
13.07.2015, 14:52     Идентификаторы интерфейсов #5
Цитата Сообщение от ninja2 Посмотреть сообщение
Где брать эти номера кто знает????
Придумывать наугад, желательно при помощи соответствующего инструмента, вооружённого пристойным генератором случайных чисел. Такой инструмент (guidgen.exe) входит в состав VisualStudio, есть также всяческие сайты, готовые помочь в нелёгком деле генерации.
Yandex
Объявления
13.07.2015, 14:52     Идентификаторы интерфейсов
Ответ Создать тему
Опции темы

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