Создание DLL

Общая информация. В опциях компилятора используйте ключ -m для отмены декорирования имен функций при компиляции библиотеки. На данный момент имеется ограничение: начальная инициализация глобальных переменных, определенных в модулях исходного кода, составляющих DLL, не реализована.

Для ОС Windows.

В версии компилятора 0.54 появилась возможность создания динамически загружаемых библиотек (DLL). В качестве точки входа используйте функцию WinAPI DllMain. В опциях компоновщика ld для этого пользуйтесь ключом -e. Для инициализации библиотеки используйте какую-нибудь функцию в момент наступления события DLL_PROCESS_ATTACH, например. С помощью файла экспорта (с расширением *.def) определите экспортируемые функции. Формат этого файла довольно прост: LIBRARY "имя_библиотеки_с_расширением" EXPORT список_имен_экспортируемых_функций. Имя каждой функции должно начинаться с новой строки. Также можно указать адрес размещения библиотеки BASE=0xDDDDDDDD, где 0xDDDDDDDD - шестнадцатиричный адрес. Пример создания DLL имеется в папке C:\DC32\EX\MODULES\OOPDLL и C:\DC32\EX\GTK\TVIEWDLL\DLL, а также в C:\DC32\EX\WIN32\DLLTEST. Там же хранятся примеры динамической компоновки библиотеки.

Для ОС Linux.

Возможность создания DLL появилась в версии компилятора 0.58. При необходимости, для инициализации библиотеки используйте предопределенную функцию _finit(), при завершении работы библиотеки - функцию _fini(). Пример создания DLL имеется в папке /DC32/EX/MODULES/TESTDLL и /DC32/EX/MODULES/TESTDYNDLL. Ограничение: на данный момент не реализован экспорт глобальных переменных в разделяемой библиотеке.

См. также


Яндекс | Картинки | Видео | Карты | Карты ОСМ | Спутник | Гугл | Вольфрам-Альфа | РуВики | EnWiki