dll.c
上传用户:jmzj888
上传日期:2007-01-02
资源大小:220k
文件大小:3k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB
  2.    This file is public domain and comes with NO WARRANTY of any kind */
  3. /*
  4. ** DLL.C - This is the ODBC sample driver code for
  5. ** LIBMAIN processing.
  6. **
  7. */
  8. #include "myodbc.h"
  9. #ifdef THREAD
  10. #include <my_pthread.h>
  11. #endif
  12. #include <locale.h>
  13. char *default_locale, *decimal_point, *thousands_sep;
  14. uint decimal_point_length,thousands_sep_length;
  15. static bool myodbc_inited=0;
  16. void myodbc_init(void)
  17. {
  18.   struct lconv *tmp;
  19.   DBUG_ENTER("myodbc_init");
  20.   if (!myodbc_inited)
  21.   {
  22.     myodbc_inited=1;
  23.     my_init();
  24. #ifdef LOG_ALL
  25. #ifdef __UNIX__
  26.     DBUG_PUSH("d:t:S:O,/tmp/myodbc.log");
  27. #else
  28.     DBUG_PUSH("d:t:S:O,c::\tmp\myodbc.log");
  29. #endif
  30. #else
  31.     if (getenv("MYODBC_LOG") != NULL)
  32.       DBUG_PUSH(getenv("MYODBC_LOG"));
  33. #endif
  34.     init_getfunctions();
  35.     default_locale=my_strdup(setlocale(LC_NUMERIC,NullS),MYF(0));
  36.     setlocale(LC_NUMERIC,"");
  37.     tmp=localeconv();
  38.     decimal_point=my_strdup(tmp->decimal_point,MYF(0));
  39.     decimal_point_length=strlen(decimal_point);
  40.     thousands_sep=my_strdup(tmp->thousands_sep,MYF(0));
  41.     thousands_sep_length=strlen(thousands_sep);
  42.     setlocale(LC_NUMERIC,default_locale);
  43.   }
  44.   DBUG_VOID_RETURN;
  45. }
  46. #ifdef _WIN32
  47. static int inited=0;
  48. HINSTANCE NEAR s_hModule; // Saved module handle.
  49. BOOL APIENTRY LibMain(HANDLE hInst,DWORD ul_reason_being_called,
  50.       LPVOID lpReserved)
  51. {
  52.   switch (ul_reason_being_called) {
  53.   case DLL_PROCESS_ATTACH: // case of libentry call in win 3.x
  54.   if (!inited++)
  55.   {
  56.     WSADATA wsaData;
  57.     s_hModule = hInst;
  58.     if (WSAStartup(MAKEWORD(1, 1), &wsaData))
  59.       return FALSE;
  60.     myodbc_init();
  61.   }
  62.   break;
  63.   case DLL_THREAD_ATTACH:
  64. #ifdef THREAD
  65.       my_thread_global_init();
  66. #endif
  67.     break;
  68.   case DLL_PROCESS_DETACH: // case of wep call in win 3.x
  69.      if (!--inited)
  70.      {
  71.         WSACleanup();
  72.      }
  73.     break;
  74.   case DLL_THREAD_DETACH:
  75.     break;
  76.   default:
  77.     break;
  78.   } /* switch */
  79.   return TRUE;
  80.   UNREFERENCED_PARAMETER(lpReserved);
  81. } /* LibMain */
  82. int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved)
  83. {
  84.   return LibMain(hInst,ul_reason_being_called,lpReserved);
  85. }
  86. #elif defined(WINDOWS)
  87. // - - - - - - - - -
  88. // This routine is called by LIBSTART.ASM at module load time.  All it
  89. // does in this sample is remember the DLL module handle. The module
  90. // handle is needed if you want to do things like load stuff from the
  91. // resource file (for instance string resources).
  92. int _export FAR PASCAL libmain(HANDLE hModule,short cbHeapSize,
  93.        UCHAR FAR *lszCmdLine)
  94. {
  95. s_hModule = hModule;
  96. myodbc_init();
  97. return TRUE;
  98. }
  99. #endif
  100. #ifdef WIN32
  101. void __declspec( dllexport) FAR PASCAL LoadByOrdinal(void);
  102. // Entry point to cause DM to load using ordinals
  103. void __declspec( dllexport) FAR PASCAL LoadByOrdinal(void)
  104. {}
  105. #endif