Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » API der externen Funktionen in SQL Anywhere » Prototypen externer Funktionen

 

an_extfn_api-Struktur

Wird verwendet, um mit der aufrufenden SQL-Umgebung zu kommunizieren.

Syntax
typedef struct an_extfn_api {
    short (SQL_CALLBACK *get_value)(
                void *          arg_handle,
                a_sql_uint32    arg_num,
                an_extfn_value *value
                );
    short (SQL_CALLBACK *get_piece)(
                void *          arg_handle,
                a_sql_uint32    arg_num,
                an_extfn_value *value,
                a_sql_uint32    offset
                );
    short (SQL_CALLBACK *set_value)(
                void *          arg_handle,
                a_sql_uint32    arg_num,
                an_extfn_value *value
                short           append
                );
    void (SQL_CALLBACK *set_cancel)(
                void *          arg_handle,
                void *          cancel_handle
                );
} an_extfn_api;
Eigenschaften
  • get_value   Verwenden Sie diese Callback-Funktion, um den Wert des angegebenen Parameters abzurufen. Das folgende Beispiel ruft den Wert des Parameters 1 ab.
    result = extapi->get_value( arg_handle, 1, &arg )
    if( result == 0 || arg.data == NULL )
    {
        return; // no parameter or parameter is NULL
    }

  • get_piece   Verwenden Sie diese Callback-Funktion, um den nächsten Abschnitt des Werts des angegebenen Parameters abzurufen (falls vorhanden). Das folgende Beispiel ruft die verbleibenden Abschnitte des Parameters 1 ab.
    cmd = (char *)malloc( arg.len.total_len + 1 );
    offset = 0;
    for( ; result != 0; )
    {
         if( arg.data == NULL ) break;
         memcpy( &cmd[offset], arg.data, arg.piece_len );
         offset += arg.piece_len;
         cmd[offset] = '\0';
         if( arg.piece_len == 0 ) break;
         result = extapi->get_piece( arg_handle, 1, &arg, offset );
    }

  • set_value   Verwenden Sie diese Callback-Funktion, um den Wert des angegebenen Parameters festzulegen. Das folgende Beispiel legt den Rückgabewert (Parameter 0) für eine RETURNS-Klausel einer FUNCTION fest.
    an_extfn_value      retval;
    int ret = -1;
    
    // set up the return value struct
    retval.type = DT_INT;
    retval.data = (void*) &ret;
    retval.piece_len = retval.len.total_len =
        (a_sql_uint32) sizeof( int );
    extapi->set_value( arg_handle, 0, &retval, 0 );

  • set_cancel   Verwenden Sie diese Callback-Funktion, um einen Zeiger auf eine Variable einzurichten, die durch die extfn_cancel-Methode festgelegt werden kann. Im Folgenden finden Sie ein Beispiel.
    short               canceled = 0;
    extapi->set_cancel( arg_handle, &canceled );

Bemerkungen

Ein Zeiger auf die an_extfn_api-Struktur wird durch den Aufrufer an Ihre externe Funktion übergeben. Hier ein Beispiel:

extern "C" __declspec( dllexport )
void my_external_proc( an_extfn_api *extapi, void *arg_handle )
{
    short               result;
    short               canceled;
    an_extfn_value      arg;

    canceled = 0;
    extapi->set_cancel( arg_handle, &canceled );

    result = extapi->get_value( arg_handle, 1, &arg );
    if( canceled || result == 0 || arg.data == NULL )
    {
        return; // no parameter or parameter is NULL
    }
.
.
.
}

Wenn Sie eine der Callback-Funktionen verwenden, müssen Sie das Argument-Handle zurück übergeben, das an Ihre externe Funktion als zweiter Parameter übergeben wurde.

Siehe auch