我正在使用可從Lua站點下載的Lua52.exe二進制文件。我想用我寫的DLL擴展它的功能。所以我寫了一個DLL,將Lua源文件包含到我的VS DLL項目中。該代碼如下。當我在通過Lua52.exe運行的lua文件中執行以下操作時,出現「檢測到多個Lua虛擬機」錯誤。所以Lua52.exe帶有lua52.dll,所以我認爲它是動態鏈接的,當它啓動時它會加載lua52.dll來啓動一個lua虛擬機。當我的DLL被加載時,我會懷疑傳入的lua_State來自lua52.exe。 VM在談論什麼?我是否必須動態鏈接到我的DLL中的lua?我可以讓我的DLL不以某種方式創建一個lua虛擬機嗎?我的意思是我不是自己做這件事,所以lua來源的東西必須是。多個Lua VM檢測到
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;
}
lua二進制模塊不能鏈接lua自己。在Windows上,這比在其他系統上更困難,我認爲你需要鏈接到將運行你的模塊的lua二進制文件的**相同** lua dll。 – 2015-02-24 16:33:48
所以基本上你說要做https://msdn.microsoft.com/en-us/library/ms810279.aspx?我很困惑。或者你的意思是在我的DLL項目中做一個動態鏈接,因爲它應該加載lua53.exe使用的lua52.dll。 – user441521 2015-02-24 16:35:23
我不*認爲*如此。你的模塊不應該直接加載lua。 [this](http://lua-users.org/wiki/BuildingModules)有幫助嗎? – 2015-02-24 16:39:28