[ create a new paste ] login | about

Link: http://codepad.org/FNqtZXYo    [ raw code | fork ]

C, pasted on Mar 19:
// myLibrary.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"

extern "C" {
	#include "d:\trunk\packages\Lua5.1\include\lua.h"
	#include "d:\trunk\packages\Lua5.1\include\lualib.h"
}

#include <stdio.h>

#pragma comment(lib, "d:/trunk/Packages/Lua5.1/lib/Lua5.1.lib")

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
	if(ul_reason_for_call == DLL_PROCESS_DETACH) {
		printf("DLL_PROCESS_DETACH (mylibrary)\n");
    }
    return TRUE;
}

//////////////////////////////////////////////////////////////////////////
/// 
static int module_cleanup(lua_State* L) {
	printf("module_cleanup (mylibrary)\n");
	return 0;
}

//////////////////////////////////////////////////////////////////////////
/// 
extern "C" __declspec(dllexport) int luaopen_mylibrary(lua_State* L) {
	printf("luaopen_mylibrary\n");

	lua_newtable(L);
	int table = lua_gettop(L);

	/* env.__gc = module_cleanup */
	lua_pushcclosure(L, module_cleanup, 0);
	lua_setfield(L, LUA_ENVIRONINDEX, "__gc");

	/* setmetatable(userdata, env) */
	/* env.__module_sentinel_ud = userdata */
	lua_newuserdata(L, 0);
	int ud = lua_gettop(L);
	lua_pushvalue(L, LUA_ENVIRONINDEX);
	lua_setmetatable(L, ud);
	lua_setfield(L, LUA_ENVIRONINDEX, "__module_sentinel_ud");

	return 1;
}


Create a new paste based on this one


Comments: