text: /* Copyright (C) 2011 The Android Open Source Project
  **
  ** This software is licensed under the terms of the GNU General Public
  ** License version 2, as published by the Free Software Foundation, and
  ** may be copied, distributed, and modified under those terms.
  **
  ** This program is distributed in the hope that it will be useful,
  ** but WITHOUT ANY WARRANTY; without even the implied warranty of
  ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  ** GNU General Public License for more details.
  */
  #ifndef ANDROID_UTILS_DLL_H
  #define ANDROID_UTILS_DLL_H
  
  /* Opaque type to model a dynamic library handle */
  typedef struct ADynamicLibrary   ADynamicLibrary;
  
  /* Try to load/open a dynamic library named 'libraryName', looking for
   * it in the optional paths listed by 'libraryPaths'.
   *
   * Once opened, you can use adynamicLibrary_findSymbol() and
   * adynamicLibrary_close() on it.
   *
   * libraryName :: library name, if no extension is provided, then '.so'
   *                will be appended on Unix systems, or '.dll' on Windows.
   *
   * pError :: On success, '*pError' will be set to NULL. On error, it will
   *           point to a string describing the error, which must be freed by
   *           the caller.
   *
   * returns an ADynamicLibrary pointer.
   */
  ADynamicLibrary*   adynamicLibrary_open( const char*  libraryName,
                                           char**       pError);
  
  /* Find a symbol inside a dynamic library. */
  void* adynamicLibrary_findSymbol( ADynamicLibrary*  lib,
                                    const char*       symbolName,
                                    char**            pError);
  
  /* Close/unload a given dynamic library */
  void  adynamicLibrary_close( ADynamicLibrary*  lib );
  
  #endif /* ANDROID_UTILS_DLL_H */
  