[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LoadLibrary and 5.2
- From: Cosmin Apreutesei <cosmin.apreutesei@...>
- Date: Tue, 12 Jan 2010 16:37:47 +0200
> I understand what you are saying but the main motivation for the change
> was NOT to find modules, it was to find DLLs that the modules depend on and
> that are not Lua modules.
>
> For example, iuplua depends on iup. When iuplua is required the iup DLL
> must also be found. And this is NOT handled by the package.cpath. Lua for
> Windows has lots of these DLLs that are NOT modules. That's the only reason
> the Lua for Windows installation must change the PATH so these DLLs can be
> found in the "clibs" subfolder.
>
> Is there any other solution to this problem despite changing LoadLibrary?
As usual M$ solve it very late in the game... Here's a snippet from my
win32 test suite of fbclient:
--bind SetDllDirectory from kernel32.dll (available in WinXP SP1+ and Vista)
--it's the official way in Windows to load a bunch of related dlls
from a directory of your chosing.
local alien = require'alien'
local kernel32 = alien.load('kernel32')
local ok,err = xpcall(function()
kernel32.SetDllDirectoryA:types{ABI='stdcall',ret='int','string'}
end,debug.traceback)
if not ok then
error ([[
Sorry but you need a kernel32.dll with SetDllDirectoryA() (WinXP SP1+ or Vista)
to run the automated test suite on Windows.
The error was: ]]..err)
end
function set_dll_directory(dir)
assert(kernel32.SetDllDirectoryA(dir) ~= 0, 'SetDllDirectoryA() error')
end