powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли писать COM компоненты на C?
11 сообщений из 11, страница 1 из 1
Можно ли писать COM компоненты на C?
    #38150309
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Можно ли разрабатывать COM компоненты на C? Как это делать на C++/C# я в курсе, но интересует именно C. Общался с разными людьми, искал в google ответ на данный вопрос. Одни пишут, что нельзя, другие - что можно.

Одни пишут, что в C интерфейсы можно реализовать посредством структур, в которых, помимо обычных полей, будут присутствовать и указатели на функции (альтернатива методам в C#). Однако меня слегка смущает тот факт, что разные компиляторы могут по разному организовывать выравнивание содержимого структур и возможно, что это будет проблемой для подобного подхода. Это всего лишь предположение.

В любом случае, я не нашёл в интернете конкретных примеров по теме. Буду весьма признателен за ссылки на примеры.

Спасибо
___________________________________________________________
Британские "учёные" - фундаментальный подход к разной фигне...
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150320
vvm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150329
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

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

Практически - вряд ли кому нужно. Я уверен, что если копнуть поглубже, то выяснится что никаких реальных обоснований для написания такого модуля на С нет.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150331
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyЯ уверен, что если копнуть поглубже, то выяснится что никаких реальных обоснований для написания такого модуля на С нет.
Это я интересуюсь для себя. Мне самому было бы интересно попробовать написать элементарный COM компонент на C.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150332
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvmCompositum,

http://www.intuitive-data.com/ole_c.htm
Спасибо за ссылку, почитаю на досуге.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150370
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли разрабатывать COM компоненты на C?

Да.

Как это делать на C++/C# я в курсе, но интересует именно C.

Да в общем-то также. Только таблица виртуальных методов там описывается явно, в виде массива указателей на функцию.
В IDL задай целевой язык С, а не С++, и получишь...
Правда, я никогда не занимался этим.

Общался с разными людьми, искал в google ответ на данный вопрос. Одни пишут, что нельзя, другие - что можно.

Здрасте, оно изначально разрабатывалось для С.

Одни пишут, что в C интерфейсы можно реализовать посредством структур, в которых, помимо обычных полей, будут присутствовать и указатели на функции (альтернатива методам в C#).

Нет, там объекты -- структуры, интерфейсы -- массивы указателей на функции.

Однако меня слегка смущает тот факт, что разные компиляторы могут по разному организовывать выравнивание содержимого структур и возможно, что это будет проблемой для подобного подхода. Это всего лишь предположение.

Гы, OLE расчитано было на РОВНО ОДИН компилятор, точнее -- два. Microsoft C и Microsoft C++.
А все остальные либо производители делают бинарно совместимыми с ними (спеки опубликованы), либо компиляторы идут лесом
(в части программирования OLE на них).

В любом случае, я не нашёл в интернете конкретных примеров по теме. Буду весьма признателен за ссылки на примеры.

Не знаю. Inside to OLE может быть?


И на последок -- вопрос: а нафига ж тебе делать что-то в OLE на С, а не на С++, когда С++ может всё то, что может и С, и может использовать любую библиотеку С ?
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150456
Фотография tehKosh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно можно, в sdk даже есть кучка сишных оберток, которые это все дело упрощают.
Еще гляньте книжку Дейл Роджерсон - Основы COM, мне очень понравилась в свое время - там по шагам, по сути мы сами реализуем com вместе с автором. Классная книжка.
Но, конечно же, для разработки лучше использовать atl - очень все ускоряет.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150475
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Compositum:
CompositumМожно ли разрабатывать COM компоненты на C?Да. Можете почитать исходники Wine (чистый C), там есть реализации COM-интерфейсов. Например, для Direct3D 9:
// http://source.winehq.org/source/dlls/d3d9/device.c
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
static HRESULT WINAPI d3d9_device_DrawPrimitive(IDirect3DDevice9Ex *iface,
        D3DPRIMITIVETYPE primitive_type, UINT start_vertex, UINT primitive_count)
{
    ...
}
...
static const struct IDirect3DDevice9ExVtbl d3d9_device_vtbl =
{
    ...
    d3d9_device_DrawPrimitive,
    ...
};
...
HRESULT device_init(...
        ...
        ...)
{
    ...
    device->IDirect3DDevice9Ex_iface.lpVtbl = &d3d9_device_vtbl;
    ...
}

Как видите, таблица виртуальных методов пишется вручную.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150587
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю всех за ответы.

tehKoshЕще гляньте книжку Дейл Роджерсон - Основы COM, мне очень понравилась в свое время - там по шагам, по сути мы сами реализуем com вместе с автором. Классная книжка.
Я как раз её и читаю :) Но там, к сожалению, примеры только на C++.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38150883
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

COM интерфейс вы все равно будете описывать на IDL (interface definition language), а генерировать код для прокси и стабов будете с помощь MIDL. Поэтому прочитайте http://msdn.microsoft.com/ru-ru/library/windows/desktop/aa367300(v=vs.85).aspx, пригодится.
...
Рейтинг: 0 / 0
Можно ли писать COM компоненты на C?
    #38151176
Фотография OoCc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumДоброго времени суток.

Можно ли разрабатывать COM компоненты на C? Как это делать на C++/C# я в курсе, но интересует именно C. Общался с разными людьми, искал в google ответ на данный вопрос. Одни пишут, что нельзя, другие - что можно.

Можно. СОМ не завист ни от языка ни от платформы.

Я бы начал с Dispatch интерфейса, как с самого простого и прозрачного в имплементации. Передача данных через него ограничена типом variant. Что для простых компонентов вполне достаточно. На его основе можно легко делать компоненты хоть на ассемблере.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Можно ли писать COM компоненты на C?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]