@sddvxd

Что означает эта строка(модификатор в макросе)?

Здравствуйте! Объясните пожалуйста, как такой модификатор MYLIBAPI будет влиять на функции?

#define MYLIBAPI extern "С" __declspec(dllimport)
  • Вопрос задан
  • 180 просмотров
Решения вопроса 2
@4elovek37
Программист C++
Макрос упрощает импорт из dll в программу. Там, где будете использовать "MYLIBAPI", будет разворачиваться директива импорта из dll.
extern "C" обозначает использование простой генерации сигнатуры функции (в стиле языка С) при получении объектных файлов. В частности, это запрещает компилятору C++ производить "декорацию" (или "украшение") имени функции дополнительными символами при работе с DLL
Пример:
extern "C" __declspec(dllimport)double AddNumbers(double a, double b);
в вашем случае можно писать
MYLIBAPI double AddNumbers(double a, double b);
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Тут есть два модификатора.

1. extern "C" — говорит, что функцию НЕ надо «козявить» на манер Си++, кодируя в имени её параметры наподобие h(int) → _Z1hi. Используется для доступа из Си++ к функциям, которые скомпилированы другим компилятором (Паскалем, Си…), а также для всяких там функций, которым надо дать фиксированное имя — например, функций DLL.

2. __declspec(dllimport). Это нужно для доступа к функциям DLL: линкер будет брать функции прямо из DLL, без создания *.lib или *.a (как минимум MinGW так работает). Языки, сильно привязанные к определённой ОС (например, Delphi) могут создавать свои ключевые слова для доступа, например, к DLL или COM.
procedure DoSomething(x : integer); cdecl;  external 'something.dll';

Застандартизированный Си вынуждает полагаться на ключевые слова, начинающиеся с двух подчерков.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
GavriKos
@GavriKos
Это не модификатор. Это имя макроса. А дальше - его тело. Теперь везде в коде MYLIBAPI заменится на тело.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
CTRL+ Москва
от 250 000 до 320 000 ₽
CTRL+ Москва
от 200 000 до 300 000 ₽
CTRL+ Белград
от 250 000 до 320 000 ₽
22 нояб. 2024, в 00:55
500 руб./за проект
21 нояб. 2024, в 23:30
300000 руб./за проект
21 нояб. 2024, в 22:21
3000 руб./в час