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

В C++ имеются пространства имён и классы, в то время как в C этого нет. Как библиотеку, написанную на C++ используют в C? Насколько я понимаю, для C нужно будет и заголовочные файлы создавать отдельные... Буду признателен за небольшие наглядные примеры.

Спасибо
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313289
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumКак библиотеку, написанную на C++ используют в C?

Точно так же. Пространства имён и классы это всего лишь привески в mangled names.
Вменяемые библиотеки оборачивают экспортируемые функции в extern "C".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313299
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТочно так же.
Можете показать пример, как вы будете использовать в C, например, следующий заголовочный файл?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
#ifndef SOME_LIBRARY_H
#define SOME_LIBRARY_H
#include <iostream>
#include <string>
namespace My_namespace{
	void print(){
		std::cout << "void My_namespace::print()" << std::endl;
	}
	struct My_struct{	
		My_struct(const std::string& val){
			std::cout << "My_struct::My_struct(): " << val << std::endl;
			s = val;
		}
		static void static_print(){
			std::cout << "void My_struct::static_print()" << std::endl;
		}
		void print(){
			std::cout << "void My_struct::print(): " << s << std::endl;
		}
	private:
		std::string s;
	};
}
#endif


Как в C вы вызовете все три функции?

Спасибо.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313302
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumМожете показать пример, как вы будете использовать в C, например,
следующий заголовочный файл?
Ну, если речь идёт о таких библиотеках, то ответ на сабж: никак. Если библиотека
предполагается к использованию в С - делается отдельный интерфейс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313304
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovCompositumМожете показать пример, как вы будете использовать в C, например,
следующий заголовочный файл?
Ну, если речь идёт о таких библиотеках, то ответ на сабж: никак. Если библиотека
предполагается к использованию в С - делается отдельный интерфейс.
Предлагаю не превращать топик в очередное поле для абстрактных теоретических рассуждений. Язык программного кода более предпочтителен. Выше я показал упрощённый пример с inline функциями. Если невозможно использовать "такой" заголовочный файл (по мне вполне понятным причинам), то логично было бы показать его C-интерпретацию - именно о ней я и спрашиваю. Я понимаю, что в C-версии заголовков функции должны быть вынесены за рамки объявления структуры и в экземплярной функции первым аргументом, наверняка должен быть аналог this, а так же внесены и некоторые др. изменения, но не всё мне понятно: например, как обыграть namespace и конструктор...
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313305
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositumнапример, как обыграть namespace и конструктор...

Никак. namespace отсекается extern "C", конструкторы - под запретом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313310
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovCompositumнапример, как обыграть namespace и конструктор...

Никак. namespace отсекается extern "C", конструкторы - под запретом.
Т.о. полноценно библиотеку C++ в C невозможно использовать? Ведь, понятное дело, нет смысла ограничивать библиотеку в угоду C, а с др. стороны, если невозможно создавать объекты, используя конструкторы, то всё сводится на нет... Да и то, что namespaces обрезаются - потенциальный источник конфликтов, т.к. в разных пространствах имён могли находиться одноимённые функции с одинаковыми сигнатурами. Верно?
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313311
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

ну, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#ifndef SOME_C_HEADER_H
#define SOME_C_HEADER_H
#ifdef __cplusplus
extern "C" {
#endif
	void My_namespace_print();
	struct My_namespace_My_struct;
        typedef My_namespace_My_struct* My_structRef;

	My_structRef My_namespace_My_struct_create(char* val);
	void My_namespace_static_print();
	void My_namespace_print(My_structRef struct);
        void My_namespace_My_struct_destroy(My_structRef victim); //деструктор придется писать явно.
#ifdef __cplusplus
}
#endif
#endif
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313318
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositumпотенциальный источник конфликтов, т.к. в разных пространствах имён могли
находиться одноимённые функции с одинаковыми сигнатурами.
Именно это - источник symbol hell в Linux. И "сигнатура" функции в С это её имя. Поэтому в
С-интерфейсах широко используются префиксы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313325
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumТ.о. полноценно библиотеку C++ в C невозможно использовать? Ведь, понятное дело, нет смысла ограничивать библиотеку в угоду C, а с др. стороны, если невозможно создавать объекты, используя конструкторы, то всё сводится на нет...
Полноценно библиотеку C++ в C использовать можно.
Просто вы не те приоритеты расставляете.
Ценность библиотеки в том что она решает какую -то задачу, а не в том что есть какие-то конструкторы или другой синтаксический сахар.
Если вы хотите использовать ее в С, то пишете легковесную обертку на С++, которая имеет С-интерфейс, а внутри вызывает С++-библиотеку для решения задачи. По научному это - шаблон проектирования Adapter.

А то что вы не можете в С использовать синтаксис С++, это вполне естественно. Хотите синтаксис С++ - пишите программы на С++.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313442
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

Библиотеки с++ в с не используют.
Обратное возможно.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38313567
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.о. полноценно библиотеку C++ в C невозможно использовать?

Да, невозможно.

Наоборот возможно.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315009
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
MasterZivТ.о. полноценно библиотеку C++ в C невозможно использовать?

Да, невозможно.

Наоборот возможно.
Уже не один раз на эту тему рассуждали...
Влоб - невозможно. Но никто и ничто не мешает соорудить "обёртку".
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315114
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zMasterZivТ.о. полноценно библиотеку C++ в C невозможно использовать?

Да, невозможно.

Наоборот возможно.
Уже не один раз на эту тему рассуждали...
Влоб - невозможно. Но никто и ничто не мешает соорудить "обёртку".

Соорудить обертку можно, но только если не используются интенсивно шаблоны.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315181
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возвращаюсь к данной теме...

Внизу прикреплён архив с двумя маленькими тестовыми "проектами":
- проект библиотеки (DLL файла)
- проект приложения, использующего указанный выше DLL файл.

Оба проекта написаны на C++. Буду признателен, если кто-нибудь покажет, как на C написать приложение, использующее функционал моей DLL и выполняющее то же самое, что и мой exe файл.

В файле readme.txt написано что к чему, а так же дана ссылка на web-страницу с более подробной информацией.

Спасибо.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315233
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у кого-то браузер не Google Chrome и не хочет скачивать по указанной ссылке, альтернативная ссылка (правда там readme.txt уже на англ. языке): http://files.mail.ru/457E37297C5345ADB32E30D456C99CBD
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315235
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

Дело не в ссылке, а в том что мы вообще не хотим ничего скачивать :)
Оформите это как задание на одном из тысяч фрилансерсих сайтов - там вам это сделают за 5 копеек.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315241
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДело не в ссылке, а в том что мы вообще не хотим ничего скачивать :)
Так никто и не заставляет.
Anatoly MoskovskyОформите это как задание на одном из тысяч фрилансерсих сайтов - там вам это сделают за 5 копеек.Я не студент, который хочет сдать преподу чужой труд, выдавая его за свой.

Тема закрыта, разобрался.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315951
z
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
z
Гость
MasterZivzпропущено...

Уже не один раз на эту тему рассуждали...
Влоб - невозможно. Но никто и ничто не мешает соорудить "обёртку".

Соорудить обертку можно, но только если не используются интенсивно шаблоны.
А я то и не знал, и "сдуру" либу agg затолкал в обертку для проского С... И ведь заработало!
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38315961
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если кому интересна конкретика, то по данной теме мне подробно ответили здесь (см. сообщение, помеченное мною как ответ). Там же перечислены все нюансы и показан вариант C интерфейса обозначенной мною библиотеки.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38316439
kamre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zА я то и не знал, и "сдуру" либу agg затолкал в обертку для проского С... И ведь заработало!
Молодец! Затолкай еще заодно библиотеку boost::multi_index "в обертку для плоского С", да так, чтобы без потери ее универсальности.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38316444
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamre,

Задача - использовать С++ библиотеку из С, а не сделать универсальную обертку.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38316456
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kamrezА я то и не знал, и "сдуру" либу agg затолкал в обертку для проского С... И ведь заработало!
Молодец! Затолкай еще заодно библиотеку boost::multi_index "в обертку для плоского С", да так, чтобы без потери ее универсальности.Радуют меня такие вопли. "А сделай вот такую дурную работу! Не хочешь! Значит ее невозможно сделать."
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38316463
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи, предлагаю разборки аля "кто круче" перенести в ПТ , либо в ЗПТ , а не флудить в топике.
...
Рейтинг: 0 / 0
Использование библиотек C++ в C
    #38316512
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все рады? Тогда все.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование библиотек C++ в C
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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