Можно ли написать 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]
]
Другие вопросы по тегам