10

Windows アプリケーション用のプラグインを書きたいのですが、それは DLL でなければなりません。Red と Red/System を混ぜてやってみたいです。しかし、SO の Rebol&Red チャットルームで質問したところ、現時点で Red と Red/System の両方で可能か、それとも Red/System のみで可能かについて、さまざまな回答が得られました。決定的な答えは何ですか?

4

1 に答える 1

9

はい、可能です。Red-Blog で 0.3.3のアナウンスを確認できます。

まず、Red/Systemのプロセスを説明する短いスニペットを次に示します。

共有ライブラリの生成

1 年以来、私たちは共有ライブラリの生成に取り組んでいましたが、現在はメイン ブランチで利用できます。ライブラリのロードおよび解放時にエクスポートされたシンボルや特別なコールバック関数を宣言する方法など、ライブラリの生成をサポートするための新機能が追加されました。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 に答える