PyAPI_FUNC(type):申明一个公共的Python API函数并且返回一个PyObject*代表对应的类型

PyAPI_DATA(type): 声明公共的Python数据和类型

PyMODINIT_FUNC: 一个Python模块初始化函数。如果这些函数是在Python内核的,他们就提供Python的内核。如果是一个扩展的模块。那可能需要拓展库支持平台的外部连接

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121

/*

  All windows ports, except cygwin, are handled in PC/pyconfig.h.



  Cygwin is the only other autoconf platform requiring special

  linkage handling and it uses __declspec().

*/

/* 

 除了cygwin之外的所有Windows socket 文件都在PC / pyconfig.h中处理。

 */

#if defined(__CYGWIN__)

#       define HAVE_DECLSPEC_DLL

#endif



/* only get special linkage if built as shared or platform is Cygwin */

#if defined(Py_ENABLE_SHARED) || defined(__CYGWIN__)

#       if defined(HAVE_DECLSPEC_DLL)

#               if defined(Py_BUILD_CORE) || defined(Py_BUILD_CORE_BUILTIN)

#                       define PyAPI_FUNC(RTYPE) __declspec(dllexport) RTYPE

#                       define PyAPI_DATA(RTYPE) extern __declspec(dllexport) RTYPE

        /* module init functions inside the core need no external linkage */

        /* except for Cygwin to handle embedding */

#                       if defined(__CYGWIN__)

#                               define PyMODINIT_FUNC __declspec(dllexport) PyObject*

#                       else /* __CYGWIN__ */

#                               define PyMODINIT_FUNC PyObject*

#                       endif /* __CYGWIN__ */

#               else /* Py_BUILD_CORE */

        /* Building an extension module, or an embedded situation */

        /* public Python functions and data are imported */

        /* Under Cygwin, auto-import functions to prevent compilation */

        /* failures similar to those described at the bottom of 4.1: */

        /* http://docs.python.org/extending/windows.html#a-cookbook-approach */

#                       if !defined(__CYGWIN__)

#                               define PyAPI_FUNC(RTYPE) __declspec(dllimport) RTYPE

#                       endif /* !__CYGWIN__ */

#                       define PyAPI_DATA(RTYPE) extern __declspec(dllimport) RTYPE

        /* module init functions outside the core must be exported */

#                       if defined(__cplusplus)

#                               define PyMODINIT_FUNC extern "C" __declspec(dllexport) PyObject*

#                       else /* __cplusplus */

#                               define PyMODINIT_FUNC __declspec(dllexport) PyObject*

#                       endif /* __cplusplus */

#               endif /* Py_BUILD_CORE */

#       endif /* HAVE_DECLSPEC_DLL */

#endif /* Py_ENABLE_SHARED */



/* If no external linkage macros defined by now, create defaults */

#ifndef PyAPI_FUNC

#       define PyAPI_FUNC(RTYPE) RTYPE

#endif

#ifndef PyAPI_DATA

#       define PyAPI_DATA(RTYPE) extern RTYPE

#endif

#ifndef PyMODINIT_FUNC

#       if defined(__cplusplus)

#               define PyMODINIT_FUNC extern "C" PyObject*

#       else /* __cplusplus */

#               define PyMODINIT_FUNC PyObject*

#       endif /* __cplusplus */

#endif