Экспорт функций из DLL с использованием __declspec (dllexport)

0

Я работаю над проектом (решение VS 2012), включая joystic.cpp. Проект был создан как DLL, чтобы иметь возможность вызывать библиотеку из другого проекта. Приложение получает немедленные данные джойстика в эксклюзивном режиме через таймер диалога, отображая их в диалоговом окне.

Я редактировал файл resource.h с помощью макроса:

#ifdef LIBRARY_EXPORTS
#    define LIBRARY_API __declspec(dllexport)
#else
#    define LIBRARY_API __declspec(dllimport)
#endif

чтобы иметь возможность экспортировать функции, заказывая:

LIBRARY_API function();

Однако следует ли экспортировать все функции программы или нет?

Теги:
dll
visual-studio-2012
dllexport

1 ответ

0
Лучший ответ

Должен ли я экспортировать все функции программы или нет?

Как правило, при разработке интерфейса к библиотеке вы должны экспортировать только те функции, которые необходимы потребителям библиотеки.

Если вы экспортировали каждую функцию, вам нужно будет документировать каждую функцию. Тем не менее, многие библиотеки могут не понадобиться пользователям библиотеки. Многие функции будут закрыты для реализации библиотеки.

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

По сути, чем больше площадь поверхности вашего публичного интерфейса библиотеки, тем больше ваша задача обслуживания. Таким образом, вы, как правило, стремитесь предоставить минимально возможный публичный интерфейс, который обеспечивает требуемую функциональность для пользователей библиотеки.

  • 0
    Спасибо за ответ. Тем не менее, я все еще немного запутался. На моем joystic.cpp каждая функция вызывается изнутри WinMain, и кажется, что все эти функции необходимы для того, чтобы получить диалоговое окно, которое печатает коды джойстика. Должен ли я экспортировать только WinMain? Я попробовал это с помощью команды: extern "C" int __declspec(dllexport) __stdcall _tWinMain(HINSTANCE hInst, HINSTANCE h0, LPTSTR lpCmdLine, int nCmdShow); но C2059 syntax error '__declspec(dllexport)' ошибку: C2059 syntax error '__declspec(dllexport)' Что мне делать?
  • 0
    Вы не можете экспортировать WinMain . Вам просто нужно экспортировать любую функцию, которая вызывается извне библиотеки. Если это все функции в вашей библиотеке, то это будет необычно. Я пытался ответить более широко.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню