Wird verwendet, um mit der aufrufenden SQL-Umgebung zu kommunizieren.
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; |
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 ); |
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.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |