waifu2x-vulkan
waifu2x-vulkan copied to clipboard
建议更新部分‘u'相关代码适应python3.12
waifu2x_py.cpp使用以下的代码: PyArg_Parse(rel, "u", &path) PyArg_ParseTuple(args, "|u", &modelPath) PyArg_Parse(rel, "u#", &path) 由于python3.12已经完全弃'u',会造成编译的py312版本有bug。 经测试以下修改有用: 1、原来: #if _WIN32 const wchar_t* path = NULL; PyArg_Parse(rel, "u", &path); 改为: #if _WIN32 const wchar_t* path = PyUnicode_AsWideCharString(rel, NULL);
2、原来: #if _WIN32 const wchar_t* modelPath = 0; if (!PyArg_ParseTuple(args, "|u", &modelPath)) Py_RETURN_NONE; 改为: #if _WIN32 const wchar_t* modelPath = 0; PyObject* pyModelPathObj = NULL; // 声明 PyObject 指针接收参数 if (!PyArg_ParseTuple(args, "|O", &pyModelPathObj)) // 使用 "O" 格式获取通用对象 Py_RETURN_NONE;
if (pyModelPathObj && pyModelPathObj != Py_None) {
modelPath = PyUnicode_AsWideCharString(pyModelPathObj, NULL); // 转换为 wchar_t*
if (!modelPath) {
Py_RETURN_NONE;
}
}
3、原来: #if _WIN32 const wchar_t* path = NULL; PyArg_Parse(rel, "u#", &path); 改为: #if _WIN32 PyObject* pyPathObj = NULL; Py_ssize_t pathLength = 0;
// 使用 "O" 格式获取通用对象,再通过 PyUnicode_AsWideCharString 显式转换
if (!PyArg_Parse(rel, "O", &pyPathObj)) {
// 错误处理
return NULL;
}
const wchar_t* path = NULL;
if (pyPathObj && pyPathObj != Py_None) {
path = PyUnicode_AsWideCharString(pyPathObj, &pathLength);
if (!path) {
PyErr_SetString(PyExc_TypeError, "Failed to convert path to wide string");
return NULL;
}
}
已修改