10

我想为一些 Windows 应用程序编写一个插件,它必须是一个 DLL。我真的很想尝试混合使用红色和红色/系统。但是在 SO 上询问 Rebol&Red 聊天室时,我得到了不同的反应,即目前是否可以在 Red 和 Red/System 中,或者仅在 Red/System 中。确定的答案是什么?

4

1 回答 1

9

对的,这是可能的。0.3.3可以查看红博公告

首先,这是一个描述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指令需要位于 Red/System 上下文中#system-global。您在 Red 中拥有的任何功能都需要使用 Red/System 包装器进行包装。您可以使用#call以下方法执行此操作:

Red []    

hello: does [print "hello"]    

#system-global [
        hellosystem: does [
            #call [hello]
        ]    

        #export cdecl [hellosystem]
]
于 2013-12-22T16:52:17.957 回答