首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LuaInterface -如何从任何路径加载程序集?

LuaInterface -如何从任何路径加载程序集?
EN

Stack Overflow用户
提问于 2012-12-11 02:27:29
回答 2查看 1.6K关注 0票数 2

我正在尝试使用LuaInterface加载.net程序集。如果我将程序集放在与我的可执行文件(以及我的LuaInterface.dll和LuaNet.dll)相同的文件夹中,那么一切都会正常工作。我想将程序集移动到不同的文件夹中,但当我尝试这样做时,我得到了"A .NET exception occured in user-code“。我试过了:

代码语言:javascript
复制
package.path = package.path .. "C:\\path\\to\\my\\assembly\\?.dll"
luanet.load_assembly("MyAssembly")

代码语言:javascript
复制
luanet.load_assembly("C:\\path\\to\\my\\assembly\\MyAssembly")

代码语言:javascript
复制
luanet.load_assembly("C:\\path\\to\\my\\assembly\\MyAssembly.dll")

所有这些都会返回.NET异常错误。有没有办法定义LuaInterface使用的路径?

EN

回答 2

Stack Overflow用户

发布于 2013-01-08 03:05:21

您的程序集是由“宿主”可执行文件加载的,而不是真正由Lua环境本身加载的。luanet.load_assembly("MyAssembly")只是让程序集可以在Lua环境中访问。例如(C#):

代码语言:javascript
复制
using MyAssembly; //you can't compile unless MyAssembly is available

namespace LuaRunner
{
    class LuaRunner
    {        
        void DoLua()
        {
            using (LuaInterface.Lua lua = new LuaInterface.Lua())
            {
                lua.DoString("luanet.load_assembly('MyAssembly')");
                //... do what you want within Lua with MyAssembly
            }
        }
    }
}

您的运行程序是运行Lua的“主机”,所以实际上加载MyAssembly的是您的运行程序。您的可执行文件需要一个对MyAssembly.dll的引用(并且需要能够在运行时在通常的位置找到它)。

票数 0
EN

Stack Overflow用户

发布于 2015-02-12 21:40:40

若要搜索其他程序集,请设置package.cpath变量。例如:

代码语言:javascript
复制
package.cpath = DATA_DIR .. "\\clibs\\?.dll;" .. package.cpath

Lua 5.1 documentation

必需(modname)

首先需要查询package.preloadmodname。如果它有一个值,这个值(应该是一个函数)就是加载器。否则,需要使用存储在package.path中的路径搜索Lua加载器。如果同样失败,它将使用存储在package.cpath中的路径搜索C加载器。

package.cpath

搜索C加载器所使用的路径。

Lua初始化C路径package.cpath的方式与初始化Lua路径package.path的方式相同,使用环境变量LUA_CPATH或在luaconf.h.中定义的默认路径

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13806936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档