home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 15 / AACD15.ISO / AACD / Programming / Python2 / Python20_source / Python / dynload_os2.c < prev    next >
Encoding:
C/C++ Source or Header  |  2000-10-25  |  958 b   |  47 lines

  1.  
  2. /* Support for dynamic loading of extension modules */
  3.  
  4. #define  INCL_DOSERRORS
  5. #define  INCL_DOSMODULEMGR
  6. #include <os2.h>
  7.  
  8. #include "Python.h"
  9. #include "importdl.h"
  10.  
  11.  
  12. const struct filedescr _PyImport_DynLoadFiletab[] = {
  13.     {".pyd", "rb", C_EXTENSION},
  14.     {".dll", "rb", C_EXTENSION},
  15.     {0, 0}
  16. };
  17.  
  18. dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
  19.                     const char *pathname, FILE *fp)
  20. {
  21.     dl_funcptr p;
  22.     APIRET  rc;
  23.     HMODULE hDLL;
  24.     char failreason[256];
  25.     char funcname[258];
  26.  
  27.     rc = DosLoadModule(failreason,
  28.                sizeof(failreason),
  29.                pathname,
  30.                &hDLL);
  31.  
  32.     if (rc != NO_ERROR) {
  33.         char errBuf[256];
  34.         sprintf(errBuf,
  35.             "DLL load failed, rc = %d: %s",
  36.             rc, failreason);
  37.         PyErr_SetString(PyExc_ImportError, errBuf);
  38.         return NULL;
  39.     }
  40.  
  41.     sprintf(funcname, "init%.200s", shortname);
  42.     rc = DosQueryProcAddr(hDLL, 0L, funcname, &p);
  43.     if (rc != NO_ERROR)
  44.         p = NULL; /* Signify Failure to Acquire Entrypoint */
  45.     return p;
  46. }
  47.