static PyObject * call_state_registration_func(PyObject *mod, PyObject *args) { int i, ret; PyModuleDef *def = PyModule_GetDef(mod); if (def == NULL) { return NULL; } if (!PyArg_ParseTuple(args, "i:call_state_registration_func", &i)) return NULL; switch (i) { case 0: mod = PyState_FindModule(def); if (mod == NULL) { Py_RETURN_NONE; } return mod; case 1: ret = PyState_AddModule(mod, def); if (ret != 0) { return NULL; } break; case 2: ret = PyState_RemoveModule(def); if (ret != 0) { return NULL; } break; } Py_RETURN_NONE; }
//------------------------------------------------------------------------------------- bool install_py_dlls(void) { PyObject *modules = PyImport_GetModuleDict(); int i = 0; while(true) { if(g_funs[i] == NULL) break; DEBUG_MSG(fmt::format("Script::install_py_dlls(): {}\n", g_sfuns[i])); PyObject * m = (*g_funs[i++])(); if(m == NULL) { return false; } struct PyModuleDef *def; def = PyModule_GetDef(m); if (!def) { PyErr_BadInternalCall(); Py_DECREF(m); return false; } if (PyState_AddModule(m, def) < 0 || PyDict_SetItemString(modules, def->m_name, m) < 0) { Py_DECREF(m); return false; } g_importedModules[i - 1] = m; } return true; }