Как получить сообщение об ошибке SFML для Cython?

Я пытаюсь обернуть поток ошибок SFML, чтобы получить последнее сообщение об ошибке в пространство Python.

Вот как SFML объявляет поток ошибок (увидеть источник):

namespace sf {
std::ostream& err();
}

SFML говорит, что вы можете перенаправить вышеуказанный поток в ваш буфер (в примере в файл, но я хочу преобразовать его в строку в конце концов):

// Redirect to a file
std::ofstream file("sfml-log.txt");
std::streambuf* previous = sf::err().rdbuf(file.rdbuf());

Мой файл .pxd с некоторыми упрощенными обертками:

cdef extern from '<sstream>' namespace 'std' nogil:
cppclass stringbuf:
stringbuf() except +

cdef extern from '<iostream>' namespace 'std' nogil:
cppclass ostream:
stringbuf* rdbuf(stringbuf*)

cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
ostream cerr 'sf::err'

И мой модуль .pyx:

cdef void set_error_handler(stringbuf& buffer):
cerr.rdbuf(&buffer)

cdef object get_last_error():
error = error_buffer.str()
error_buffer.str('')
return error

cdef stringbuf error_buffer
set_error_handler(error_buffer)

Также я конвертирую stringbuf с сообщением об ошибке в строку Python правильно в get_last_error() функционировать?

Обновить

Мне удалось скомпилировать мой код Cython. Я добавил здесь круглые скобки:

cdef extern from 'SFML/System.hpp' namespace 'sf' nogil:
ostream cerr 'sf::err()'  # Added ()

Но все же я не могу получить сообщение об ошибке, о которой сообщает SFML, в моем stringbuf error_buffer при звонке get_last_error() определено выше (возвращаемое значение — пустая строка).

0

Решение

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

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

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