afa@codespeak.net schrieb:
Author: afa Date: Tue May 20 16:17:22 2008 New Revision: 55005
Modified: pypy/branch/win32port/pypy/lib/_ctypes/builtin.py pypy/branch/win32port/pypy/lib/msvcrt.py pypy/branch/win32port/pypy/module/_rawffi/__init__.py pypy/branch/win32port/pypy/module/_rawffi/interp_rawffi.py pypy/branch/win32port/pypy/module/_rawffi/test/test__rawffi.py pypy/branch/win32port/pypy/rlib/libffi.py pypy/branch/win32port/pypy/rlib/rwin32.py pypy/branch/win32port/pypy/rlib/test/test_libffi.py Log: Maciej was right: it's better to dynamically get the name of the msvcrt library: the same generated sources may be recompiled, e.g. in debug mode.
I hope I got it right: in pypy-c.exe, we compile a function that retrieves the dll containing the "fopen" pointer address.
+ #include <stdio.h> + + /* Get the module where the "fopen" function resides in */ + HANDLE get_libc_handle() { + MEMORY_BASIC_INFORMATION mi; + memset(&mi, 0, sizeof(mi)); + + if( !VirtualQueryEx(GetCurrentProcess(), &fopen, &mi, sizeof(mi)) ) + return 0; + + return (HMODULE)mi.AllocationBase; + } + '''],
Ha, that's the best approach I have seen so far to get the name if the msvcrt runtime library. Hope you don't mind if I steal it for 'official' ctypes (I will check if it works in win64 also before) ? -- Thanks, Thomas