Next: Defining library interfaces, Previous: Declaring C Functions, Up: C Interface [Contents][Index]
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
言語の関数ポインタのタイプごとに、 個別の呼び出しワードを定義する必要があります。