私はC#(VS2010).Net(4.0)でプログラミングするのが初めてで、何日か前から自分で解決できないことに遭遇しています。C#外部ライブラリ(Lua)呼び出し問題
私はC#コードで外部スクリプト言語(Lua)を使用しています。 - 私はLuaのクラスを呼び出すしようとすると、>プログラムが正常に動作します プロジェクトは、コンソールアプリケーションです:私はLuaInterpreterは.NET 4.0
最初の試みのために構築された使用行うに
。
2回目の試行: プロジェクトはExcelから使用されるLibrrary 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)
問題を再現するには:あなたは http://www.mdome.org/2011/05/16/luainterface-for-csharp-net-4-custom-build/
2- LuaInterface .NET 4.0を取得する必要があります
1-プロジェクトに参照
、3-コピーとしてLuaInterfaceを追加します。ビルのディレクトリにあるLua51 DLL(Excelのシートも置いてあります)
4-お尻のライブラリ
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
}
}
墜落した機能、それが署名しているように見えるので、私はその おかげ
アドバイスをいただきありがとうございます。 gacutilが「不明なエラー」と言って失敗したため、DLLをGACに入れることができませんでした。 dllをExcel.exeディレクトリに入れるのは問題ありません。これは、DLLとプログラムが正常に動作することを証明しますが、それは長期的な解決策ではありません... 私はクラスを呼び出すと、DLLが検索されるフォルダを追跡する方法を知っていますか? 視覚化するには:Excel - >ユーザーDLL(私のアセンブリ) - > LuaInterface.dll - > Lua51.dll Excelディレクトリにある必要があるものはLua51.dllです –