2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 483
1

Экспорт С++ функции в стиле С

17.04.2021, 17:15. Показов 1367. Ответов 6
Метки с++ (Все метки)

Добрый день,

Есть простая функция, которая принимает С++ аргумент (например вектор) и необходимо экспортировать эту функцию.
Как известно, при экспорте С++ накладывает name mangling на экспортированные имена и это иногда приводит к невозможности использования библиотеки из разных компиляторов (при попытке использовать библиотеку с другим компилятором линковщик выдает ошибку).

Имеет ли смысл делать эту функцию extern "C" ?
Допустим так:
C++
1
extern "C" void FOO_EXPORT foo(std::vector& v);
Перегрузок функции нет.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2021, 17:15
Ответы с готовыми решениями:

Экспорт функций dll в стиле С++
Пример написания unmanaged функции на примере вызова с помощью rundll32. ...

C++ в функциональном стиле: как писать в стиле C#/LINQ (без дополнительных библиотек)?
Как писать в стиле C#/LINQ (без дополнительных библиотек)? Вот, допустим, есть простейшая задача:...

В каком стиле правильно именовать функции в Си?
В каком стиле правильно именовать функции в Си? Какой из следующий вариантов: ?

Экспорт функции
Как правильно экспортировать функцию, чтобы она была видна в другом модуле по вызову через import {...

6
С чаем беда...
Эксперт CЭксперт С++
10014 / 5360 / 1467
Регистрация: 18.10.2014
Сообщений: 12,926
17.04.2021, 17:19 2
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Имеет ли смысл делать эту функцию extern "C" ?
Для чего? Откуда возник такой вопрос?

Вызывать эту функцию из других языков программирования вы просто так вы не сможете, ибо в других языках у вас не будет аргумента типа std::vector.

А для того, чтобы вызывать ее из С++ кода никакое extern "C" не нужно.

Остаются только хаки, но о хаках нужно говорить специально и конкретно. Приходят на ум разве что callback-конктесты, когда и функция и аргумент пришли снаружи - из С++ кода
1
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
17.04.2021, 17:24 3
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
Имеет ли смысл делать эту функцию extern "C" ?
Допустим так:
Без разницы. Только нужно учитывать, что такие модули (которые экспортируют классы типа std::vector) могут развалиться в любой момент. Потом запаришься искать ошибку.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 483
17.04.2021, 17:44  [ТС] 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Для чего? Откуда возник такой вопрос?
Для того чтобы избежать name mangling и разрешить использование этой функции даже в случае, если библиотека была собрана другим компилятором.

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Без разницы. Только нужно учитывать, что такие модули (которые экспортируют классы типа std::vector) могут развалиться в любой момент. Потом запаришься искать ошибку.
как развалиться? что может стать причиной развала?
0
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
17.04.2021, 17:55 5
Лучший ответ Сообщение было отмечено Kerim_Geophysic как решение

Решение

Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
как развалиться? что может стать причиной развала?
Не, естественно я сказал про наихудший вариант.
Если ты гарантируешь, что твоя dll и тот, кто её вызывает, будут использовать одну и ту же версию/реализацию стандартной библиотеки, то ради бога, экспортируй что хочешь.
1
2753 / 1908 / 568
Регистрация: 05.06.2014
Сообщений: 5,559
17.04.2021, 18:06 6
Цитата Сообщение от Kerim_Geophysic Посмотреть сообщение
как развалиться? что может стать причиной развала?
ABI. Никто не гарантирует что потроха векторов из разных реализаций STL совместимы друг с другом.
1
2 / 2 / 0
Регистрация: 08.01.2016
Сообщений: 483
17.04.2021, 18:07  [ТС] 7
oleg-m1973, Renji, понял, теперь дошло
спасибо за консультацию
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.04.2021, 18:07
Помогаю со студенческими работами здесь

Экспорт функции из dll на с++
Здравствуйте, помогите пожалуйста. Не могу экспортировать функцию LibreryNIFound() из dll. dll...

Экспорт функции DLL
Вечер добрый. Работаю над проектом, в котором из DLL экспортируются функции для другого проекта....

Экспорт и импорт функции
Экспортирую функцию export async function db (sql, q){ const connection = await...

Экспорт функции из dll
Здравствуйте! Сейчас изучаю экспорты функций из dll-ок. Функцию без параметров удалось успешно...

Экспорт переменной и функции DLL
Привет всем кибер-форумчанам!) Вопрос, собственно, вроде и не сложный, но я не могу разобраться в...

Экспорт Си библиотеки и использование ее функции
Всем доброго времени суток. Использую стороннюю библиотеку написанную на Си. Написал обертку на C#....


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru