Оглавление

Сборка библиотеки

В папке sdk/angelscript/projects вы найдете файлы солюшенов для популярных компиляторов. Однако, эти файлы проектов не всегда обновляются до последней версии библиотеки. Если в процессе сборки возникли ошибки, убедитель что в проект включены все файлы из папки sdk/angelscript/source, и что настройки проекта соостветствуют этой статье.

Опции compile time

Код пытается учитывать различия компиляторов, где это возможно. Заголовочный файл as_config.h был создан для этой цели. Там вы найдете некоторые #define, влияющие на работу каопилятора. Вероятно, вам не стоит изменять этот файл, но если вы используете компилятор, который ранее не использовался и вы получаете ошибки компиляции - то наверно вам всетаки стоит заглянуть в этот файл.

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

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

Подключение библиотеки

Есть четыре способа компиляции и подключения AngelScript. Рекомендуется статическая линковка. Заметим, что все четыре способа являются взаимозаменяемыми с небольшим изменением в коде, то есть объявлением флага перед включением заголовочного файла и, обычным кодом для ручной загрузки DLL. Остальной ваш код выглядит одинакого для каждого из вариантов.

1. Включение исходных файлов библиотеки в свой проект

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

// Подключаем хидер 
#include "angelscript.h"
 
// ... Начинаем использовать библиотеку 

2. Сборка статической библиотеки и подключение к проекту

Наиболее предпочтительный способ. При сборке статической библиотеки убедитесь в корректных настройках компилятора, чтобы не получить конфликты с CRT (Для Visual C++ данные настройки находятся в Project -> Settings -> C/C++ -> Category: Code Generation).

Для использования библиотеки необходимо подключить только один заголовочный файл angelscript.h без специальных настроек.

// Подключаем хидер 
#include "angelscript.h"
 
// ... Начинаем использовать библиотеку 

3. Сборка динамической библиотеки и библиотеки импорта

С помощью Microsoft Visual C++ можно собрать динамически подключаемую библиотеку с библиотекой импорта. Импорт библиотеки позаботиться о необходимой работе по загрузке DLL и связыванию функции. Возможный недостаток этого метода заключается в том, что вы не в состоянии получать удобные сообщения об ошибках в случае неудачи загрузки библиотеки.

Для использования библиотеки вы должны объявить ANGELSCRIPT_DLL_LIBRARY_IMPORT перед подключением заголовочного файла angelscript.h.

// Подключаем хидер
#define ANGELSCRIPT_DLL_LIBRARY_IMPORT
#include "angelscript.h"
 
// ... Начинаем использовать библиотеку 

4. Ручная загрузка динамической библиотеки

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

Для загрузки вручную DLL вам следует определить ANGELSCRIPT_DLL_MANUAL_IMPORT перед подключением angelscript.h. Это позволит убедиться, что заголовочный файл не объявит прототипы функций, так как вы, скорее всего, захотите использовать эти имена для указателей на функции.

// Подключаем хидер.
typedef asIScriptEngine * AS_CALL t_asCreateScriptEngine(int);
t_asCreateScriptEngine *asCreateScriptEngine = 0;

// ... Обьявляем остальные функции

// Загружаем библиотеку и биндим функции
HMODULE dll = LoadLibrary("angelscript.dll");
asCreateScriptEngine = (t_asCreateScriptEngine*)GetProcAddress(dll, "_asCreateScriptEngine");

// ... Биндим остальные функции

// ... Начинаем использовать библиотеку

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.