Чем объясняется нижеприведенная декларация / ключевое слово? - PullRequest
0 голосов
/ 25 февраля 2009

Я хотел бы знать, что делают следующие объявления. Я видел их в коде C на скомпилированном коде MSVisual Studio.

extern "C" __declspec (dllexport)

extern "C" __declspec (dllimport)

Я немного знаю, что они используются для объявления внешних связей для функций (функционал определен в другом исходном файле. Но хотелось бы подробно узнать, как это работает.

-Ajit

Ответы [ 3 ]

3 голосов
/ 25 февраля 2009

Часть extern "C" сообщает компилятору C ++, что объявленный элемент должен использовать связь C, что означает, что имя не будет искажено (или будет искажено так же, как компилятор C). Это позволяет связывать элемент с кодом C и большинством других языков, поскольку связь C обычно является стандартом, используемым для этого на платформе.

Элементы __declspec(dllexport) и __declspec(dllimport) являются нестандартными атрибутами, которые сообщают компилятору, что элемент должен быть экспортирован (или импортирован) из DLL. Атрибут __declspec() поддерживается компиляторами MS и, возможно, другими компиляторами, предназначенными для Windows. Я не уверен, если GCC делает или нет. Другие атрибуты класса хранения, которые могут быть указаны с помощью __declspec() (по крайней мере, в MSVC), включают uuid(), naked, deprecated и другие, которые предоставляют компилятору информацию о том, как должен компилироваться объект или функция. *

1 голос
/ 25 февраля 2009

Это означает, что функции / классы, которые следуют за ним, видны и доступны через границы DLL, так что вы можете ссылаться на них и вызывать их из другого кода

1 голос
/ 25 февраля 2009

dllexport указывает компилятору сгенерировать файл .lib . dllimport говорит компилятору искать в файле .lib объявление функции (ее определение будет в dll).

...