Windows下Python CFFI中dlopen(None)的等效替代方案
Windows下Python CFFI调用free函数的替代方案
在Linux和macOS系统中,我们可以通过dlopen(None)加载全局C库符号表,从而调用free函数释放内存,但在Windows系统中这种方式会触发OSError: dlopen(None) cannot work on Windows for Python 3的错误。
解决方案
Windows系统中,标准C库的free函数位于msvcrt.dll(Visual C++运行时库),直接加载该DLL即可实现等效功能。如果你的程序依赖UCRT(通用C运行时),也可以选择加载ucrtbase.dll,msvcrt.dll在绝大多数Windows环境中具备更好的兼容性。
以下是跨平台兼容的代码实现:
from cffi import FFI import sys header = """ typedef struct { int32_t* members; } container_t; void free(void *ptr); """ cdefs = FFI() cdefs.cdef(header) cdefs.set_source("_main", "") # 允许外部include该头文件 # 根据系统选择加载的库 if sys.platform == "win32": lib = cdefs.dlopen("msvcrt.dll") else: lib = cdefs.dlopen(None) def free_members(container) -> None: lib.free(container.members)
内容的提问来源于stack exchange,提问作者drhagen
相关产品推荐
相关产品推荐

