-
External Function Declaration
{ PUBLIC | PRIVATE } EXTERN Identifier ( [ Parameter AS Datatype [ , ... ] ] ) [ AS Datatype ] [ IN Library ] [ EXEC Alias ] |
これは、システム共有ライブラリにある外部関数を宣言します。
Arguments
extern関数のパラメータは、Variant以外の任意のGambasデータ型にすることができます。 Gambasは自動的にそのデータ型を内部のマシン型にマーシャリングします。
オブジェクトを渡すと、関数はそのデータへのポインタを受け取ります。 オブジェクトがクラスの場合、関数はクラスの静的データへのポインタを受け取ります。
ポインタ引数には、Pointerデータ型を使用してください。
Pointer arguments
変数へのポインタを送信する必要がある場合は、VarPtr関数を使用できますが、これは文字列以外の引数に対してのみ可能です。
Examples
Extern GetAFloat(Result As Pointer, A As Float, B As Float)
Dim fResult As Float
GetAFloat(VarPtr(fResult), Pi, Pi(2))
extern関数の引数がメモリサイズ型(size_tなど)の場合も、Pointerを使用してください。これらの型はvoid *と同じ整数サイズを持つためです。 |
Function Callbacks
いくつかのextern関数は引数として関数ポインタを取り、この関数ポインタはコールバックとして使われます。
Gambas関数をコールバックとして使うには:
- extern関数宣言では、関数ポインタ引数をPointerとして宣言するだけです。
- Gambas関数名をextern関数の引数として使用してください。
Example
Private Extern qsort(base As Pointer, nmemb As Pointer, size As Pointer, compar As Pointer) In "libc:6"
Private Sub Compare(pA As Pointer, pB As Pointer) As Integer
...
End
Public Sub Main()
Dim aVal As Integer[]
...
qsort(aVal.Data, aVal.Count, 4, Compare)
...
End
プライベートまたはパブリックのGambas関数を使用できます。 あなたは、非静的メソッドを使うことさえできます:しかし、メソッドが適用されるオブジェクトはコールバックによって捕獲され、そしてプログラムの終わりでのみ解放されることに注意してください。
Return Value
extern関数の戻り値は、 Object と Variant.以外の任意のGambasデータ型になります。
extern関数が文字列を返すと、Gambasはそのコピーを返します。 関数から返される実際の文字列が必要な場合は、Pointerデータ型とStrPtr関数を使用してください。 |
Library name
ライブラリの名前は、Library引数で指定されます。 指定しない場合は、最後のLIBRARY宣言で指定された名前が使用されます。
ライブラリの名前は、拡張子やバージョン番号を付けずにそのファイルの名前にする必要があります。
たとえば、あなたのシステムでlibGL.so.1という名前のOpenGLライブラリを使いたい場合、Gambasで使う名前は "libGL"です。
ライブラリの特定のバージョン番号(Linuxでは拡張子.soの後の番号)を指定する必要がある場合は、コロン区切り文字を使用してライブラリ名の後に追加できます。
たとえば、1.0.7667バージョンのOpenGLライブラリが特に必要な場合は、ライブラリ名 "libGL:1.0.7667"を指定します。
Examples
' I need to do some ioctl's!
Extern ioctl(fd As Integer, op As Integer, arg As Pointer) As Integer In "libc:6"
...
Err = ioctl(MyStream.Handle, ...)
Function name
ライブラリ内の関数の名前は、デフォルトではGambas内の関数の名前、つまり識別子です。
それが不可能であるか望ましくない場合は、EXECキーワードを使用して実際のライブラリー関数名を指定できます。
Examples
'この関数名はすでにGambasの予約語です。
Extern SysOpen(Name As String, Flags As Integer, Mode As Integer) As Integer In "libc:6" Exec "open"
See also
コメント
最新を表示する
NG表示方式
NGID一覧