Я разрабатываю модуль Python, который должен получить указатель на NSView, чтобы прикрепить OpenGL к окну.
Я использую wxPython в качестве библиотеки GUI, в которой есть метод GetHandle (), который, как говорится в документации, «возвращает специфичный для платформы дескриптор (в виде длинного целого) физического окна».
Поскольку мой модуль должен быть совместим как с Windows, так и с Mac, я создал функцию-обёртку, которая принимает unsigned long и преобразует его в void *, чтобы передать его фактическому методу, который обрабатывает создание OpenGL.
void wrap_CreateContext(unsigned long windowId)
{
return CreateContext((void*)&(windowId));
}
В Windows все работает, но на Mac, когда я пытаюсь привести void * к NSView * и затем использовать этот NSView *, отладчик выдает мне ошибку EXC_BAD_ACCESS.
Вот как я приведу void * к NSView *:
void CreateContext(void* windowId)
{
NSView* view = (NSView*)windowId;
// for example I try to get the view size
NSSize size = view.frame.size; // <--- EXC_BAD_ACCESS error
}
Я действительно не знаю, заключается ли проблема в моем приведении вначале от unsigned long к void *, а затем от void * к NSView *, или кроется проблема в другом месте.
Используемая версия wxPython основана на Cocoa, поэтому я должен получить указатель на NSView из GetHandle ().
Нашел решение. Проблема была в том, что я перешел с длинного на пустое * и обратно в NSView *.
Приведение напрямую из long в NSView * работает нормально.