Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Использование библиотек C++ в C / 25 сообщений из 25, страница 1 из 1
27.06.2013, 19:51
    #38313282
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
Доброго времени суток.

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

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

Точно так же. Пространства имён и классы это всего лишь привески в mangled names.
Вменяемые библиотеки оборачивают экспортируемые функции в extern "C".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.06.2013, 20:23
    #38313299
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
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
27.06.2013, 20:27
    #38313302
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
CompositumМожете показать пример, как вы будете использовать в C, например,
следующий заголовочный файл?
Ну, если речь идёт о таких библиотеках, то ответ на сабж: никак. Если библиотека
предполагается к использованию в С - делается отдельный интерфейс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.06.2013, 20:38
    #38313304
Compositum
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
Dimitry SibiryakovCompositumМожете показать пример, как вы будете использовать в C, например,
следующий заголовочный файл?
Ну, если речь идёт о таких библиотеках, то ответ на сабж: никак. Если библиотека
предполагается к использованию в С - делается отдельный интерфейс.
Предлагаю не превращать топик в очередное поле для абстрактных теоретических рассуждений. Язык программного кода более предпочтителен. Выше я показал упрощённый пример с inline функциями. Если невозможно использовать "такой" заголовочный файл (по мне вполне понятным причинам), то логично было бы показать его C-интерпретацию - именно о ней я и спрашиваю. Я понимаю, что в C-версии заголовков функции должны быть вынесены за рамки объявления структуры и в экземплярной функции первым аргументом, наверняка должен быть аналог this, а так же внесены и некоторые др. изменения, но не всё мне понятно: например, как обыграть namespace и конструктор...
...
Рейтинг: 0 / 0
27.06.2013, 20:46
    #38313305
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
Compositumнапример, как обыграть namespace и конструктор...

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

Никак. namespace отсекается extern "C", конструкторы - под запретом.
Т.о. полноценно библиотеку C++ в C невозможно использовать? Ведь, понятное дело, нет смысла ограничивать библиотеку в угоду C, а с др. стороны, если невозможно создавать объекты, используя конструкторы, то всё сводится на нет... Да и то, что namespaces обрезаются - потенциальный источник конфликтов, т.к. в разных пространствах имён могли находиться одноимённые функции с одинаковыми сигнатурами. Верно?
...
Рейтинг: 0 / 0
27.06.2013, 20:51
    #38313311
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
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
27.06.2013, 21:00
    #38313318
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
Compositumпотенциальный источник конфликтов, т.к. в разных пространствах имён могли
находиться одноимённые функции с одинаковыми сигнатурами.
Именно это - источник symbol hell в Linux. И "сигнатура" функции в С это её имя. Поэтому в
С-интерфейсах широко используются префиксы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.06.2013, 21:16
    #38313325
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование библиотек C++ в C
CompositumТ.о. полноценно библиотеку C++ в C невозможно использовать? Ведь, понятное дело, нет смысла ограничивать библиотеку в угоду C, а с др. стороны, если невозможно создавать объекты, используя конструкторы, то всё сводится на нет...
Полноценно библиотеку C++ в C использовать можно.
Просто вы не те приоритеты расставляете.
Ценность библиотеки в том что она решает какую -то задачу, а не в том что есть какие-то конструкторы или другой синтаксический сахар.
Если вы хотите использовать ее в С, то пишете легковесную обертку на С++, которая имеет С-интерфейс, а внутри вызывает С++-библиотеку для решения задачи. По научному это - шаблон проектирования Adapter.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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