Lua 可以从C调用require吗
我有一个在共享对象中编译的模块(我遵循了本文的库部分),我想从C而不是从解释器加载它Lua 可以从C调用require吗,lua,Lua,我有一个在共享对象中编译的模块(我遵循了本文的库部分),我想从C而不是从解释器加载它 可能吗?如果是,怎么做?是的,这是可能的,因为require是存储在全局环境中的函数。当Lua需要处理-l选项时,它会在独立解释器中执行相同的操作,请参见函数 您可以使用与任何其他全局函数相同的方法执行此操作—在最简单的情况下,调用lua_getglobal(),然后将文件名推送到require,然后调用lua_call/lua_pcall/whatever。是的,这是可能的,因为require是存储在全局环境
可能吗?如果是,怎么做?是的,这是可能的,因为
require
是存储在全局环境中的函数。当Lua需要处理-l
选项时,它会在独立解释器中执行相同的操作,请参见函数
您可以使用与任何其他全局函数相同的方法执行此操作—在最简单的情况下,调用lua_getglobal(),然后将文件名推送到require,然后调用lua_call/lua_pcall/whatever。是的,这是可能的,因为
require
是存储在全局环境中的函数。当Lua需要处理-l
选项时,它会在独立解释器中执行相同的操作,请参见函数
执行此操作的方式与使用任何其他全局函数的方式相同—在最简单的情况下,调用lua_getglobal(),然后按需输入文件名,然后调用lua_call/lua_pcall/which
不幸的是,现在我使用的是Lua5.1,而“dolibrary”函数不存在,我>试图获取部分代码,但它崩溃了:\n所以,现在,我使用luaL_dostring(L,>“需要‘libMyWrappings’”);libMyWrappings必须与c>程序位于同一目录中,并且我不能使用路径来指示库Aminos 1月22日11时45分 我刚刚遇到了同样的问题,在加载包库时必须这样做 {LUA_LOADLIBNAME,luaopen_package} 在你试着打电话之前需要先发生
不幸的是,现在我使用的是Lua5.1,而“dolibrary”函数不存在,我>试图获取部分代码,但它崩溃了:\n所以,现在,我使用luaL_dostring(L,>“需要‘libMyWrappings’”);libMyWrappings必须与c>程序位于同一目录中,并且我不能使用路径来指示库Aminos 1月22日11时45分 我刚刚遇到了同样的问题,在加载包库时必须这样做 {LUA_LOADLIBNAME,luaopen_package}
在你试着称之为之前需要发生的事情是,有趣的是,你会认为,
luaL_requiref
会做与你所说的相同的事情。但事实并非如此。除非您提供的C函数处理软件包机制。@Nicolas,luaL_requiref
几乎等同于require
。它跳过了加载程序的内容,因为它与C函数无关。@lhf:但“加载程序的内容”在很大程度上是人们使用require
开始的原因。检查表中是否存在某些内容并不困难,如果不存在,则将加载程序的结果粘贴到该表中也不困难。最困难的部分是遍历每个包.loader
可能性,并按顺序调用它们,直到一个结果正确为止。不幸的是,现在,我使用的是Lua5.1和“dolibrary”函数不存在,我试图获取部分代码,但它崩溃了:\n因此,现在,我使用luaL_dostring(L,“require'libMyWrappings'); libMyWrappings必须和c程序在同一个目录中,我不能用路径来表示lib。有趣的是,你会认为luaL_requiref
会做与你所说的相同的事情。但事实并非如此。除非您提供的C函数处理软件包机制。@Nicolas,luaL_requiref
几乎等同于require
。它跳过了加载程序的内容,因为它与C函数无关。@lhf:但“加载程序的内容”在很大程度上是人们使用require
开始的原因。检查表中是否存在某些内容并不困难,如果不存在,则将加载程序的结果粘贴到该表中也不困难。最困难的部分是遍历每个包.loader
可能性,并按顺序调用它们,直到一个结果正确为止。不幸的是,现在,我使用的是Lua5.1和“dolibrary”函数不存在,我试图获取部分代码,但它崩溃了:\n因此,现在,我使用luaL_dostring(L,“require'libMyWrappings'); libMyWrappings必须与c程序位于同一目录中,并且我不能使用路径来指示lib。