[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: LuaJIT FFI callbacks (was Re: Calling lua functions from C when using luajit ffi.)
- From: Duncan Cross <duncan.cross@...>
- Date: Tue, 15 Nov 2011 09:12:46 +0000
On Tue, Nov 15, 2011 at 8:25 AM, Duncan Cross <email@example.com> wrote:
> On Tue, Nov 15, 2011 at 5:15 AM, James McKaskill <firstname.lastname@example.org> wrote:
>> On Nov 14, 2011, at 19:30 , Duncan Cross wrote:
>>> This is fantastic news! Thanks so much for your work, and thanks too
>>> to the anonymous sponsor.
>>> One thing - I'm not certain this is related to the addition of
>>> callbacks, but I was just experimenting with Win32 calls and found
>>> that GetLastError() seems to return the wrong value (127,
>>> ERROR_PROC_NOT_FOUND) the first time it's called. This is a minimal
>>> test case:
>>> local ffi = require("ffi")
>>> ffi.cdef [[
>>> uint32_t GetLastError();
>>> void SetLastError(uint32_t code);
>>> print(ffi.C.GetLastError()) -- 127
>>> print(ffi.C.GetLastError()) -- 0
>>> (I'm explicitly setting the error here, but I discovered it because it
>>> was hiding a parameter error while I was experimenting with trying to
>>> call RegisterClassExA().)
>> I would not suggest trying to get errors using Get/SetLastError as they will be invalidated by the vm. If you really want the error use ffi.errno().
>> -- James
> It was specifically addressed before that it should work, and is not
> the same thing as errno:
> "I've fixed this in git HEAD. LuaJIT now preserves errno across hooks,
> memory allocations, invocations of the JIT compiler and other internal
> VM activity. Ditto for GetLastError() on Windows.
> On Windows you need to declare and call GetLastError() yourself (note:
> this does _not_ hold the same value as errno)."
It's also mentioned at the end of the documentation for ffi.errno():