waifu2x-vulkan icon indicating copy to clipboard operation
waifu2x-vulkan copied to clipboard

建议更新部分‘u'相关代码适应python3.12

Open lkyxgh opened this issue 1 month ago • 1 comments

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;
        }
    }

lkyxgh avatar Oct 18 '25 14:10 lkyxgh

已修改

tonquer avatar Oct 21 '25 01:10 tonquer