【发布时间】:2018-07-11 22:20:57
【问题描述】:
我收到一个错误:
OSError: exception: access violation writing 0x0000000000000000
在尝试使用 python ctypes 加载 opengl 函数时,
from ctypes import *
gl = windll.opengl32
get_proc_addr_prototype = WINFUNCTYPE(WINFUNCTYPE(c_uint), c_char_p)
get_proc_addr_paramflags = (1, "Arg1"),
get_proc_addr = get_proc_addr_prototype(("wglGetProcAddress", gl), get_proc_addr_paramflags)
glCreateProgram = get_proc_addr(c_char_p(b"glCreateProgram"))
glCreateProgram()
我以为是因为我没有创建opengl上下文,所以我运行了这段代码:
from ctypes import *
gl = windll.opengl32
gl.glClear(0x00004000) # GL_COLOR_BUFFER_BIT = 0x00004000
这有效,但尝试这种方式:
from ctypes import *
gl = windll.opengl32
get_proc_addr_prototype = WINFUNCTYPE(WINFUNCTYPE(None, c_uint), c_char_p)
get_proc_addr_paramflags = (1, "Arg1"),
get_proc_addr = get_proc_addr_prototype(("wglGetProcAddress", gl), get_proc_addr_paramflags)
glClear = wgl_get_proc_addr(c_char_p(b"glClear"))
glClear(0x00004000) # GL_COLOR_BUFFER_BIT = 0x00004000
导致同样的错误。
【问题讨论】:
-
当您查询函数指针时,您的 nmot 可能没有 GL 上下文,因此您得到的是 NULL。
标签: python opengl ctypes access-violation