Next: , Previous: , Up: C Interface   [Contents][Index]


6.28.3 Calling C function pointers from Forth

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-func1execute に似ていますが、Forth 実行トークンの代わりに C 言語の func1 ポインタを使用し、 func1 ポインタ固有である点が異なります。 Forth から呼び出したい C 言語の関数ポインタのタイプごとに、 個別の呼び出しワードを定義する必要があります。