[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: How to avoid DLL hell?
- From: steve donovan <steve.j.donovan@...>
- Date: Fri, 26 Nov 2010 12:54:44 +0200
On Fri, Nov 26, 2010 at 12:05 PM, GrayFace <sergroj@mail.ru> wrote:
> Why? Dlls may rely on runtime dll version being the same only if they are
> packaged together. Otherwise, this is a bug in dll. This bug should be
> uncommon for Lua dlls, because Lua provides an allocator that solves the
> problem of passing memory between Lua dlls.
It is true that you can avoid linking your Lua extensions against the
runtime, if you _only_ use Lua's facilities for allocating memory:
See the very useful (but long) document:
http://lua-users.org/wiki/BuildingModules
(search for 'Avoiding linking to any C run-time library' - poor man's
wiki hyperlink ;))
#include <lua.h>
#include <lauxlib.h>
#include <windows.h>
BOOL APIENTRY DllMain(HANDLE module, DWORD reason, LPVOID reserved) {
return TRUE; }
static int l_messagebox(lua_State * L) {
const char * s = luaL_checkstring(L, 1);
MessageBox(NULL, s, "messagebox", MB_OK);
return 0;
}
__declspec(dllexport) int luaopen_messagebox(lua_State * L) {
lua_pushcfunction(L, l_messagebox);
return 1;
}
It shows how to build this with gcc and cl, only 3Kb!
But, if it calls any C runtime functions, then that runtime's
allocator may kick in, and you are back where you started.
Most C extensions take the lazy way out and just use malloc (or
strdup, etc) - naturally they wish to remain portable!
steve d.