c#外部库(Lua)调用问题

本文关键字:调用 问题 Lua 外部 | 更新日期: 2023-09-27 18:03:53

我是c# (VS2010) . net(4.0)编程的新手,我遇到了我自己无法解决的问题,因为几天了。

我在c#代码中使用外部脚本语言(Lua)。

为此,我使用了为。net 4.0构建的LuaInterpreter

第一次尝试:该项目是一个控制台应用程序->当我尝试调用Lua类时,程序工作正常。

第二次尝试:该项目是从Excel中使用的类库COM ->类库编译良好,我的用户定义函数在Excel中工作良好。但是当我试图调用一个Lua类时,它崩溃了,说Lua程序集丢失了。

Could not load file or assembly 'lua51, Version=0.0.0.0, Culture=neutral, PublicKeyToken=1e1fb15b02227b8a' or one of its dependencies. Strong name validation failed. (Exception from HRESULT: 0x8013141A)

重现问题:

1-你需要从。net 4.0http://www.mdome.org/2011/05/16/luainterface-for-csharp-net-4-custom-build/

2-在你的项目中添加luinterface作为引用

3-复制Lua51 DLL在建筑目录(我把我的Excel表也在那里)

复制类库 的代码
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using Excel = Microsoft.Office.Interop.Excel;
using LuaInterface;
namespace POC
{
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ComVisible(true)]
    public class Functions
    {
        public int test()
        {
            Lua lua = new Lua();
            return 0;
        }
        #region Class in Excel
        [ComRegisterFunctionAttribute]
        public static void RegisterFunction(Type type)
        {
            Registry.ClassesRoot.CreateSubKey(
              GetSubKeyName(type, "Programmable"));
            RegistryKey key = Registry.ClassesRoot.OpenSubKey(
              GetSubKeyName(type, "InprocServer32"), true);
            key.SetValue("",
              System.Environment.SystemDirectory + @"'mscoree.dll",
              RegistryValueKind.String);
        }
        [ComUnregisterFunctionAttribute]
        public static void UnregisterFunction(Type type)
        {
            Registry.ClassesRoot.DeleteSubKey(
              GetSubKeyName(type, "Programmable"), false);
        }
        private static string GetSubKeyName(Type type,
          string subKeyName)
        {
            System.Text.StringBuilder s =
              new System.Text.StringBuilder();
            s.Append(@"CLSID'{");
            s.Append(type.GUID.ToString().ToUpper());
            s.Append(@"}'");
            s.Append(subKeyName);
            return s.ToString();
        }
        #endregion
    }
}

崩溃的函数是从Excel

中调用的测试函数我愿意接受任何帮助由于

c#外部库(Lua)调用问题

由于它似乎已被签名,尝试将Lua51放入GAC,看看它是否工作。也许你甚至可以尝试将Lua15.dll放在与excel.exe相同的路径下。

我在。net、luinterface和Lua5.1在64位机器上交互时遇到了很多问题。Lua5.1只能编译32位,这就要求你(我相信)把LuaInterface项目也构建成32位。尝试在。net项目中将"项目->属性->构建->平台目标"更改为"x86"。