быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

Можно ли компилятором gcc создать COM объекты, сервер, в частности?

19.03.2013, 19:50. Показов 3039. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По-моему, нет. Ведь в сервере среди всего прочего надо реализовывать метод объекта QueryInterface. Он может запросто принять первым параметром IID_IUnknown, но он нигде не определён, вот в чём дело! То ест в unknwn.h MSVS он прописан как 00000000-0000-0000-C000-000000000046
А вот unknwn.h gcc
unknwn.h
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
#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#endif
 
#ifndef _UNKNWN_H
#define _UNKNWN_H
#if __GNUC__ >=3
#pragma GCC system_header
#endif
 
#ifdef __cplusplus
extern "C"{
#endif
#include <objfwd.h>
#include <wtypes.h>
 
void * __RPC_USER MIDL_user_allocate(size_t);
void __RPC_USER MIDL_user_free(void*);
EXTERN_C const IID IID_IUnknown;
EXTERN_C const IID IID_IClassFactory;
#ifndef __IUnknown_INTERFACE_DEFINED__
#define __IUnknown_INTERFACE_DEFINED__
#define INTERFACE IUnknown
DECLARE_INTERFACE(IUnknown)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;
};
#undef INTERFACE
typedef IUnknown *LPUNKNOWN;
#endif
#ifndef __IClassFactory_INTERFACE_DEFINED__
#define __IClassFactory_INTERFACE_DEFINED__
#define INTERFACE IClassFactory
DECLARE_INTERFACE_(IClassFactory,IUnknown)
{
    STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
    STDMETHOD_(ULONG,AddRef)(THIS) PURE;
    STDMETHOD_(ULONG,Release)(THIS) PURE;
    STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
    STDMETHOD(LockServer)(THIS_ BOOL) PURE;
};
#undef INTERFACE
typedef IClassFactory *LPCLASSFACTORY;
#endif
HRESULT STDMETHODCALLTYPE IUnknown_QueryInterface_Proxy(IUnknown*,REFIID,void**);
void __RPC_STUB IUnknown_QueryInterface_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
ULONG STDMETHODCALLTYPE IUnknown_AddRef_Proxy(IUnknown*);
void __RPC_STUB IUnknown_AddRef_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
ULONG STDMETHODCALLTYPE IUnknown_Release_Proxy(IUnknown*);
void __RPC_STUB IUnknown_Release_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
HRESULT STDMETHODCALLTYPE IClassFactory_RemoteCreateInstance_Proxy(IClassFactory*,REFIID,IUnknown**);
void __RPC_STUB IClassFactory_RemoteCreateInstance_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
HRESULT __stdcall IClassFactory_RemoteLockServer_Proxy(IClassFactory*,BOOL);
void __RPC_STUB IClassFactory_RemoteLockServer_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD);
HRESULT STDMETHODCALLTYPE IClassFactory_CreateInstance_Proxy(IClassFactory*,IUnknown*,REFIID,void**);
HRESULT STDMETHODCALLTYPE IClassFactory_CreateInstance_Stub(IClassFactory*,REFIID,IUnknown**);
HRESULT STDMETHODCALLTYPE IClassFactory_LockServer_Proxy(IClassFactory*,BOOL);
HRESULT STDMETHODCALLTYPE IClassFactory_LockServer_Stub(IClassFactory*,BOOL);
 
#if (!defined (__cplusplus) || defined (CINTERFACE)) \
    && defined (COBJMACROS)
#define IUnknown_QueryInterface(T,r,O) (T)->lpVtbl->QueryInterface(T,r,O)
#define IUnknown_AddRef(T) (T)->lpVtbl->AddRef(T)
#define IUnknown_Release(T) (T)->lpVtbl->Release(T)
#define IClassFactory_QueryInterface(T,r,O) (T)->lpVtbl->QueryInterface(T,r,O)
#define IClassFactory_AddRef(T) (T)->lpVtbl->AddRef(T)
#define IClassFactory_Release(T) (T)->lpVtbl->Release(T)
#define IClassFactory_CreateInstance(T,p,r,O) (T)->lpVtbl->CreateInstance(T,p,r,O)
#define IClassFactory_LockServer(T,f) (T)->lpVtbl->LockServer(T,f)
#endif /* COBJMACROS */
#ifdef __cplusplus
}
#endif
#endif
Тут даже и намёка нет на какое-нибудь числовое значение. Можно, конечно самому поправить файл unknwn.h, да боюсь делов натворить. Что же делать, друзья?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.03.2013, 19:50
Ответы с готовыми решениями:

Компиляция *.cpp компилятором gcc
Недавно столкнулся с проблемой отсутствия библиотеки libgcc_s_dw2-1.dll (виртуалка с чистой виндой). Начал копаться и обнаружил, что , эта...

Непонятные проблемы с компилятором gcc
Всем привет ! Вчера делал много настроек на сервере - и незнаю может сбил что-то или что удалил но вроде все далал с умомо , ...

Учим code::blocks компилировать gcc компилятором
не умею пользоваться форумом, переместите в нужную ветку если не туда попал в общем те кто пользуются кодблоксом знают что он С/С++ ...

7
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
20.03.2013, 08:20
а это?
C++
1
2
EXTERN_C const IID IID_IUnknown;
EXTERN_C const IID IID_IClassFactory;
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
20.03.2013, 10:21  [ТС]
это-то я вижу, цифры-то где? Нету цифр, не только в этом файле, но вообще ни в одном из хидеров.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
20.03.2013, 11:09
в хидерах их не будет. вы компилить пробовали? я так думаю они в объектном файле.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
20.03.2013, 11:31  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
в хидерах их не будет
откуда такое убеждение? Например в unknwn.h MSVS они именно что ЕСТЬ, а в unknwn.h gcc им быть необязательно? Почему же?

Добавлено через 9 минут
Цитата Сообщение от vxg Посмотреть сообщение
вы компилить пробовали?
а чё компилить? Ну, компилится, так это ни о чём не говорит. В хидере объявлена переменная IID_IUnknown с неопределённым значением, а нужно с определённым.
Это всё равно что по поводу такого кода сказать:
C++
1
2
3
4
int x;
int main () {
 return 0;
}
Я: мне нужен x, равный 5;
Вы: а вы компилить пробовали?
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
20.03.2013, 11:38
Цитата Сообщение от kravam Посмотреть сообщение
В хидере объявлена переменная IID_IUnknown с неопределённым значением
она именно объявлена. но не определена. определяется она в cpp если вы из исходников собираете. либо машина ищет ее в объектных файлах (уже собранных исходниках). если бы он там ее не нашел он бы сказал "непонятно что тут у вас". так что она есть и у нее верное значение. то что MS шлепает ее в заголовки его личные религиозные проблемы.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
20.03.2013, 12:10  [ТС]
А точно ведь:
C++
1
2
3
4
5
6
7
#include <unknwn.h>
#include <stdio.h>
int main (){
  
  printf ("%x\n", &IID_IUnknown);
  getchar (); 
}
, ну и потом в отладчике:

00 00 00 00 00 00 00 00 C0 00 00 00 00 00 00 46
только когда в хидере прописано, по-любому лучше! Надо будет там от себя дописать в виде комментов.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
20.03.2013, 12:52
Цитата Сообщение от kravam Посмотреть сообщение
по-любому лучше
как-то слышал что для C++ прописывание констант в заголовочном файле - это правильно и хорошо. однако, для себя решил не ломать концепцию: заголовок - для меня это всегда лишь объявления, прототипы, классы. и никогда - определения, реализация (за исключением, пожалуй, конструкторов и деструкторов при использовании динамических данных - что бы видеть перед глазами поля класса и не забыть)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.03.2013, 12:52
Помогаю со студенческими работами здесь

как скомпилировать исходник на Python компилятором gcc?
Друзья! Знает кто-нибудь? А то в инете нет ничё, какие-то скрипты, интерпретаторы... Просто я в книге по GCC прочёл: &quot;...друrие...

Как записать компиляцию файла С в cgi компилятором gcc?
Добрый день! Вопрос такой. Как скомпилировать в gcc файл c в cgi в Убунту. Если прописать gcc путь/script.c компиляция...


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

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

Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru