C言語の関数へのポインター(たとえば、 C言語で構築された構造体など)を見つけて、 それを Forth プログラムから呼び出したい場合は、
マクロを定義することで上記の構造体を使用できます。 または、 c-funptr
を使用します。
c-funptr
( "forth-name" <{>"c-typecast"<}> "{type}" "–" "type" – ) gforth-1.0 “c-funptr”
Forth ワード Forth-name を定義します。 Forth-name には、 その後続に記述されたスタック効果と、
スタックのTOSに置かれた呼び出されたポインター(the called pointer)(つまり {type} ptr – type )があり、
型キャスト(typecast)または構造体アクセス(c-typecast)を使用して C 言語の関数へのポインター ptr
を呼び出します。
ヘッダー・ファイル func1.h に C言語の関数ポインター型 func1
が定義されており、 これらの関数は 1
つの整数引数を受け取り、 整数の結果を返すことがわかっているとします。 そして、 そのようなポインターを介して関数を呼び出したいとします。
あなたは以下のように定義するだけです
\c #include <func1.h> c-funptr call-func1 {((func1)ptr)} n -- n
そして、 例えば、 以下のようにして func1-addr
が指す関数を呼び出すことができます:
-5 func1-addr call-func1 .
Forth ワード call-func1
は execute
に似ていますが、Forth 実行トークンの代わりに C 言語の
func1
ポインターを使用し、 func1
ポインタ固有である点が異なります。 Forth から呼び出したい C
言語の関数ポインターのタイプごとに、 個別の呼び出しワードを定義する必要があります。