home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 December / PCWorld_1998-12_cd.iso / software / sybase / ASA / asa60.exe / data1.cab / h_files / dllapi.h < prev    next >
C/C++ Source or Header  |  1998-07-27  |  4KB  |  97 lines

  1.  /****************************************************************
  2.  *       Copyright (C) 1988-1998, by Sybase, Inc.                *
  3.  *       All rights reserved. No part of this software may be    *
  4.  *       reproduced in any form or by any means - graphic,       *
  5.  *       electronic or mechanical, including photocopying,       *
  6.  *       recording, taping or information storage and retrieval  *
  7.  *       systems - except with the written permission of         *
  8.  *       Sybase, Inc.                                            *
  9.  ****************************************************************/
  10.  
  11. #ifndef _DLLAPI_H_INCLUDED
  12. #define _DLLAPI_H_INCLUDED
  13.  
  14. #if defined( __cplusplus )
  15.     #define _crtn   "C"
  16. #else
  17.     #define _crtn
  18. #endif
  19.  
  20. #define _callback_pref
  21.  
  22. #if !defined( _entry )
  23.     #if defined( WIN )
  24.     #define _entry                    __far __pascal
  25.     #define _callback                __far __export __pascal
  26.     #define _callback_local                __far __pascal
  27.     #define _ext_fn_entry                __export __stdcall
  28.     #elif defined( WINNT )
  29.     #define _entry                    __stdcall
  30.     #define _callback_local                __stdcall
  31.     #if defined( __WATCOMC__ )
  32.             #define _callback                __export __stdcall
  33.         #define _ext_fn_entry           __export __stdcall
  34.     #elif defined( _MSC_VER )
  35.             #define _callback               __stdcall
  36.             #undef _callback_pref
  37.             #define _callback_pref          __declspec( dllexport )
  38.         #define _ext_fn_entry           __declspec( dllexport )
  39.     #endif
  40.     #elif defined( OS2 )
  41.     #define _entry                    __syscall
  42.     #define _callback                __syscall
  43.     #define _callback_local                __syscall
  44.     #define _ext_fn_entry                __export __syscall
  45.     #elif defined( MAC )
  46.     #define _entry                    pascal
  47.     #define _callback                pascal
  48.     #define _callback_local                pascal
  49.     #define _ext_fn_entry                pascal
  50.     #else
  51.     #define _entry   
  52.     #define _callback
  53.     #define _callback_local
  54.     #define _ext_fn_entry
  55.     #endif
  56. #endif
  57.  
  58. // These types are used so that tools routines can call back to the main
  59. // routine with messages that should be displayed in the appropriate user
  60. // interface (eg. Windows, stdout or other GUI).
  61.  
  62. #if defined( __cplusplus )
  63.     extern "C" {
  64.     typedef short _callback_pref (_callback MSG_ROUTINE)( char * str );
  65.     typedef short                (_callback_local MSG_LOCAL_ROUTINE)( char * str );
  66.     }
  67. #elif defined( THINK_C ) || defined( __MWERKS__ )
  68.     typedef _callback short        (MSG_ROUTINE)( char * str );
  69.     typedef _callback_local short   (MSG_LOCAL_ROUTINE)( char * str );
  70. #else
  71.     typedef short _callback_pref (_callback MSG_ROUTINE)( char * str );
  72.     typedef short                (_callback_local MSG_LOCAL_ROUTINE)( char * str );
  73. #endif
  74.  
  75. typedef MSG_ROUTINE *            MSG_CALLBACK;
  76.  
  77. // These typedefs define the return types supported by external function calls.
  78.  
  79. typedef signed   long    ext_fn_rv_integer;
  80. typedef signed   short    ext_fn_rv_smallint;
  81. typedef unsigned long   ext_fn_rv_real;
  82.  
  83. // These macros should be used to return values from an external function
  84. // for a particular type.  The float macro is necessary because the return
  85. // value must be forced into the same place an unsigned long would return
  86. // rather than being returned in a floating-point register.
  87.  
  88. #define return_ext_fn_integer(x)    return x
  89. #define return_ext_fn_smallint(x)   return x
  90. #define return_ext_fn_real(x)                \
  91.         {                        \
  92.         auto float fp_result = x;        \
  93.         return *((unsigned long *) &fp_result);    \
  94.         }
  95.  
  96. #endif
  97.