Обратите внимание, что для этих макросов возможны другие определения. включают/ap_config.h имеет следующие (с некоторым отступом добавленным мной):
#if !defined(WIN32) || defined(AP_MODULE_DECLARE_STATIC)
...
# if defined(WIN32)
# define AP_MODULE_DECLARE(type) type __stdcall
# else
# define AP_MODULE_DECLARE(type) type
# endif
...
#else
...
# define AP_MODULE_DECLARE(type) __declspec(dllexport) type __stdcall
...
#endif
Здесь AP_MODULE_DECLARE
используется для добавления __stdcall
(который определяет конкретное соглашение о вызове) и/или __declspec(dllexport)
(что связано для экспорта функции как части интерфейса общей библиотеки).
Обратите внимание, что, например, __declspec(dllexport)
не будет добавлен, если определено значение AP_MODULE_DECLARE_STATIC
. Моя догадка (которая может быть не совсем точной, поскольку я не знаком с этим кодом) заключается в том, что она связана с привязкой модуля как к статической библиотеке, и в этом случае __declspec(dllexport)
не имеет смысла.
Если вам интересно, что означает «dso» в комментариях к этому файлу, то для динамический общий объект. Это, в основном, общая библиотека, хотя Apache, похоже, резервирует термин разделяемая библиотека для вещей, которые не загружаются во время выполнения с использованием dlopen(3)
.
спасибо! Я пытаюсь выучить C++, среди прочего, читать открытый исходный код. У вас есть какие-либо советы по этому поводу? – slombo
@ user1092646: Ищите какой-то проект, который кажется интересным, и посмотрите, есть ли какая-нибудь работа. Например, вы можете проверить отслеживание ошибок или IRC. Еще одна вещь, которую я иногда делаю, - это выбрать небольшую ошибку в некоторых приложениях, которую я обычно просто отмахиваюсь и пытаюсь понять, что ее вызывает (и либо исправить, либо сообщить о моих выводах). Это может вас многому научить. – Ulfalizer