Можно ли написать Windows DLL в красном?
Я хотел бы написать плагин для некоторых приложений Windows, и это должна быть DLL. Я бы очень хотел попробовать сделать это в смеси Red & Red/System. Но, спросив в чате Rebol&Red здесь на SO, я получил смешанные ответы о том, возможно ли это в настоящее время как в Red и Red / System, так и только в Red / System. Какой окончательный ответ?
1 ответ
Да, это возможно. Вы можете проверить объявление на Red-Blog для 0.3.3
Прежде всего, вот небольшой фрагмент, описывающий процесс для Red/System:
Генерация общей библиотеки
Год назад мы работали над созданием общей библиотеки, теперь она доступна в основной ветке. Новые функции были добавлены для поддержки создания библиотеки, как способ объявления экспортируемых символов и специальных функций обратного вызова при загрузке и освобождении библиотеки. Вот простой пример библиотеки Red/System:
Red/System [ File: %testlib.reds ] inc: func [n [integer!] return: [integer!]][n + 1] #export [inc]
Вы скомпилируете такую разделяемую библиотеку, используя новую опцию командной строки -dlib:
do / args% rsc.r "-dlib testlib.reds"
Выходное двоичное имя будет иметь суффикс, определяемый платформой (.dll,.so или.dylib).
Во-вторых, я наконец смог получить один простой скрипт Red для компиляции в.dll. #export
Директива должна быть в красном / системном контексте, как вы можете видеть #system-global
Директива обеспечивает. Любая функция, выделенная красным, должна быть обернута в оболочку Red/System. Вы можете сделать это используя #call
как сделано ниже:
Red []
hello: does [print "hello"]
#system-global [
hellosystem: does [
#call [hello]
]
#export cdecl [hellosystem]
]