Определение подставляемых функций C++ с использованием dllexport и dllimport
Блок, относящийся только к системам Microsoft
Функцию с атрибутом dllexport можно определить как встроенную. В этом случае всегда создается экземпляр функции и она экспортируется независимо от того, ссылается ли на нее какой-либо модуль в программе. Предполагается, что функция должна импортироваться другой программой.
В качестве встроенной можно также определить функцию, объявленную с атрибутом dllimport. В этом случае функцию можно расширить (согласно спецификациям /Ob), но ее экземпляр никогда не создается. В частности, если принимается адрес встроенной импортированной функции, возвращается адрес функции, находящейся в библиотеке DLL. Это поведение аналогично получению адреса невстроенной импортированной функции.
Эти правила применяются для встроенных функций, определения которых отображаются внутри определения класса. Кроме того, локальные статические данные и строки во встроенных функциях поддерживают одинаковые идентификаторы между библиотекой DLL и клиентом так, как это было бы в одной программе (т. е. исполняемый файл без интерфейса DLL).
При предоставлении импортированных встроенных функций соблюдайте осторожность. Например, при обновлении библиотеки DLL не следует предполагать, что клиент использует ее измененную версию. Чтобы убедиться в загрузке правильной версии библиотеки DLL, перестройте также клиент этой библиотеки.