Вот код:
// Hm512.cpp: определяет экспортированные функции для приложения DLL.
//
#include "stdafx.h"
#include <windows.h>
#include <process.h>
#include <iostream>
#include "hmac_sha512.hpp"
#include <ctime>
#include <cassert>
#include <string>
#include <map>
#define LUA_LIB
#define LUA_BUILD_AS_DLL
extern "C" {
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <luaconf.h>
//#include <compat-5.3.h>
}
//
// Пример простой библиотеки на C++ для вызова ее из LUA
//
http://quik2dde.ru/viewtopic.php?id=18//
// в случае вызова функций из LUA-кода во внешней DLL
// необходимо определить эти константы до подключения заголовочных файлов LUA
BOOL APIENTRY Hm512(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
static int forLua_Hmacsha512(lua_State *L) {
const std::size_t l = 0;
std::string secret = luaL_checklstring(L, 1, l);
std::string params = luaL_checklstring(L, 2, l);
HMAC_SHA512 hmac_sha512(secret, params);
std::string d = hmac_sha512.hex_digest();
lua_pushstring(L, d.c_str());
return(1);
}
static struct luaL_reg ls_lib[] = { { "Hm512", forLua_Hmacsha512 }, { NULL, NULL }};
extern "C" LUALIB_API int luaopen_Hm512(lua_State *L) {
luaL_openlib(L, "Hm512", ls_lib, 0);
return 0;
}