External Function Declaration

ページ名:External Function Declaration
  • External Function Declaration

{ PUBLIC | PRIVATE } EXTERN

Identifier

(

[ Parameter AS Datatype [ , ... ] ]

)

[ AS Datatype ]

[ IN Library ] [ EXEC Alias ]

これは、システム共有ライブラリにある外部関数を宣言します。

Arguments

extern関数のパラメータは、Variant以外の任意のGambasデータ型にすることができます。 Gambasは自動的にそのデータ型を内部のマシン型にマーシャリングします。
オブジェクトを渡すと、関数はそのデータへのポインタを受け取ります。 オブジェクトがクラスの場合、関数はクラスの静的データへのポインタを受け取ります。
ポインタ引数には、Pointerデータ型を使用してください。

Gambasでは文字 String は共有定数なので、関数が変更しない限り、 String 引数を使用できます。

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関数をコールバックとして使うには:

  1. extern関数宣言では、関数ポインタ引数をPointerとして宣言するだけです。
  2. 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関数の戻り値は、 ObjectVariant.以外の任意の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

 

 

 

 

シェアボタン: このページをSNSに投稿するのに便利です。

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する

NG表示方式

NGID一覧