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