Как правильно очистить C ++ встроенный модуль Python, когда python связан с DelayLoading?

У меня есть приложение MFC, где мы встраиваем модуль Python в C ++, сам питон перехватывается с помощью задержки загрузки DLL. Инициализация & настройка методов работает нормально. Однако настоящая проблема возникает, когда я хочу очистить модуль перед финализацией Python Interpreter.

Код для определения моего модуля выглядит следующим образом:

 m_module_def = {
PyModuleDef_HEAD_INIT,
m_module_name.c_str(),
const_cast<char *>(module_doc),
-1,
m_method_table.table(),
NULL,
NULL,
myextension_clear,
NULL
};

И подпись к функции myextension_clear выглядит следующим образом:

#if PY_MAJOR_VERSION >= 3
#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
#else
#define GETSTATE(m) (&_state)
static struct module_state _state;
#endif

#if PY_MAJOR_VERSION >= 3
static int myextension_clear(PyObject *m) {
Py_CLEAR(GETSTATE(m)->error);
return 0;
}

#endif

Я следовал за Python API, а затем для финальной части, они не говорят об очистке, когда вы находитесь в Windows и загружены с задержкой.

Если я подключу функцию очистки, я получу следующую ошибку:
не может задержать загрузку ‘python36_d.dll’ из-за импорта символа данных ‘__Imp__Py_RefTotal’; ссылка без /DELAYLOAD:python36_d.dll

Теперь мой вопрос: кто-то уже сделал встраивание в Python 3+ или как бы вы правильно очистили модуль перед финализацией интерпретатора Python?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector