![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
А почему нельзя написать внутренности библиотеки на C++, а экспорты сделать на C с возвратом кодов ошибок?
|
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Тогда неудобно получается работать с функциями, которые должны что-то возвращать... Внутренности конечно можно на С++ написать, но опять же, даже исключениями нормально не воспользуешься...
Я пока склоняюсь к мысли протаскивать в каждую функцию последним аргументом указатель на структуру, в которую класть код ошибки и информацию о файле/строке, где ошибка произошла (и если хочется ошибку игнорировать, просто передавать NULL)... -------------------- ![]() |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Да вроде как вполне удобно. Многие функции в винапе такие. По указателю передавать переменную, в которую будет писать результаты своей деятельности.
А насчет исключений можно по-подробнее? Мы же их кидать в приложение не будем. Это сообщение отредактировал(а) Randajad - 25.6.2012, 12:06 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Если делать библиотеку на C++ с интерфейсом на C и кидать исключения из начинки, то ничего хорошего не получится... Смысл тогда использовать C++ не вижу...
-------------------- ![]() |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Смысл - для удобства разработки библиотеки.
Али религия не позволяет писать на С++? С слишком аскетичен. Это сообщение отредактировал(а) Randajad - 25.6.2012, 12:07 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Для моих целей вполне хватает и C, а все плюшки C++ типа ООП, исключений и шаблонов вместе с STL разбиваются об необходимость иметь интерфейс на C.
-------------------- ![]() |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Randajad, Ну вот допустим, библиотека написана на C++ с C-интерфейсом. Пользовательская программа - тоже на C++.
1. Библиотека и пользовательская программа компилируется одним и тем же компилятором - Ок, но зачем тогда C-интерфейс? 2. Библиотека и пользовательская программа компилируются разными компиляторами, для каждой нужна своя runtime-библиотека, могут быть проблемы. Я как-то пытался состыковать программу, наприсанную на C++ Builder 6.0 с dll, написанной на C++ Builder 5.0 - проще оказалось перекомпилировать библиотеку на C++ Builder 6.0 чем заставить нормально работать вместе разные версии компилятора. |
|||
|
||||
| Randajad |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 15.3.2012 Репутация: 8 Всего: 8 |
Значит, религия.
Как ни крути, а количество кода, при написании на С резко увеличивается. Даже буста нету. То, что экспортируемый интерфейс на С - не причина отказываться от многих возможностей языка. Тем более, 11 стандарт как никак. Добавлено @ 12:54 Библиотека динамическая? Линкуем статически CRT. Добавлено @ 12:56 С интерфейс нужен для каких-либо плагинов. Если же и библиотека и приложение разрабатываются одним автором, причем библиотека планирует использоваться только в этом приложении - зачем она тогда вообще нужна? Если же он ее позиционирует еще как отдельный продукт- это уже его дело, делать ей С интерфейс, или нет. Добавлено @ 12:59 Вообще, я крайне не люблю тех, кто линкует CRT динамически. Особенно это касается студии. Из-за того, что люди не хотят, чтобы их экзешка распухла на 30 килобайт, юзверям приходится устанавливать метры всяких MSVC Redist... Да, в некоторых случаях это оправдано. Если же автор положит все нужные дллки сам в комплект, - то вообще вопросов нет. Но многие об этом даже не задумываются, из-за чего приходится гуглить очередной редист и ставить. Это сообщение отредактировал(а) Randajad - 25.6.2012, 13:07 |
|||
|
||||
| kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Пользовательская программа будет с большой степенью вероятности на чем-то высокоуровневом, типа python+pyqt или .NET, соответственно C-интерфейс нужен для возможности создания биндингов в высокоуровневый язык...
Обычно нормальные авторы тогда делают нормальные инсталляторы, которые сами ставят редист... -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |