Я использую бинарный файл Lua52.exe, который вы можете скачать с сайта Lua. Я хочу расширить его функциональность с помощью DLL, которую я пишу. Поэтому я написал DLL, включив исходный код Lua в свой проект VS DLL. Этот код ниже. Когда я делаю следующее в файле lua, который я запускаю через Lua52.exe, я получаю сообщение об ошибке «обнаружено несколько виртуальных машин Lua». Таким образом, Lua52.exe поставляется с lua52.dll, поэтому я предполагаю, что он динамически связан, и при запуске он загружает lua52.dll, чтобы запустить виртуальную машину lua. Когда моя DLL загружается, я подозреваю, что переданный lua_State исходит от lua52.exe. О чем говорит ВМ? Должен ли я динамически связываться с lua в моей DLL? Могу ли я сделать так, чтобы моя DLL НЕ создавала виртуальную машину lua? Я имею в виду, что я не делаю это сам, поэтому что-то в источнике lua должно быть.
package.loadlib("LuaDLLTest.dll", "luaopen_msglib")()
#define DLL_EXPORT extern "C" __declspec(dllexport)
#include "lua.hpp"
#define PI (3.14159265358979323846)
static int miles_to_km(lua_State *L)
{
double miles = luaL_checknumber(L, 1);
double km = miles * 1.609;
lua_pushnumber(L, km);
return 1; /* one result */
} /* end of miles_to_km */
static int circle_calcs(lua_State *L)
{
double radius = luaL_checknumber(L, 1);
double circumference = radius * 2 * PI;
double area = PI * radius * radius;
lua_pushnumber(L, circumference);
lua_pushnumber(L, area);
return 2; /* one result */
} /* end of miles_to_km */
static const luaL_Reg testlib[] =
{
{ "miles_to_km", miles_to_km },
{ "circle_calcs", circle_calcs },
{ NULL, NULL }
};
/*
** Open msg library
*/
DLL_EXPORT int luaopen_msglib(lua_State *L)
{
lua_newtable(L);
luaL_setfuncs(L, testlib, 0);
lua_setglobal(L, "Math");
return 1;
}