来自 wxPython 的 NSView*
NSView* from wxPython
我正在开发一个 Python 模块,该模块需要获取指向 NSView 的指针,以便将 OpenGL 附加到 window。
我使用 wxPython 作为 GUI 库,它有一个方法 GetHandle(),正如文档所说,'Returns the platform-specific handle (as a long integer) of the physical window'.
因为我的模块必须与 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 之上的,所以我应该从 GetHandle() 获得一个指向 NSView 的指针。
找到解决方案。问题出在我从 long 到 void* 再回到 NSView* 的转换中。
直接从 long 转换为 NSView* 工作正常。
我正在开发一个 Python 模块,该模块需要获取指向 NSView 的指针,以便将 OpenGL 附加到 window。
我使用 wxPython 作为 GUI 库,它有一个方法 GetHandle(),正如文档所说,'Returns the platform-specific handle (as a long integer) of the physical window'.
因为我的模块必须与 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 之上的,所以我应该从 GetHandle() 获得一个指向 NSView 的指针。
找到解决方案。问题出在我从 long 到 void* 再回到 NSView* 的转换中。
直接从 long 转换为 NSView* 工作正常。