如何解决从 codedom 生成的 dll 触发事件 - 如何加入运行时生成的 dll 表单主 exe 应用程序的事件
我有一些 string[]
类型的用户输入用于计算。我想编译它们并获得比任何其他方法更快的计算。
用户输入字符串:
double _1 = 2 + 2;
double _2 = _1 + Get_Variable("var1");
return _2;
我将输入转换为适合生成 dll 的字符串
namespace namespace_Calculator
{
public class Class_Calculator
{
public static double Start_Calculating()
{
//user defined string[] type calculation inputs
double _1 = 2 + 2;
double _2 = _1 + Get_Variable("var1");
return _2;
//user defined string[] type calculation inputs
}
}
}
如何从主 exe 返回 Get_Variable()
函数?
我目前正在使用 DataTable().Compute()
我可以调用 Start_Calculating()
并获得没有变量的结果。
object[] p = new object[] { };
Assembly yeni = AppDomain.CurrentDomain.Load(File.ReadAllBytes(Dll_location));
Type t = yeni.GetType("namespace_Calculator.Class_Calculator");
MethodInfo mi = t.getmethod("Start_Calculating");
object ins = Activator.CreateInstance(t);
double cevap = (double)mi.Invoke(ins,p);
提前致谢。
解决方法
解决方案比看起来容易。
- 在 .exe 文件 codeDom 端:
将“Name.exe”添加到 CompilerParameters.ReferencedAssemblies 对象就足够了。
CompilerParameters options = new CompilerParameters();
...
options.ReferencedAssemblies.Add(AppDomain.CurrentDomain.FriendlyName);
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
CompilerResults results = provider.CompileAssemblyFromSource(options,SourceCode);
- 在 .exe 文件可调用函数端:
创建一个标准的静态公共函数
namespace ns_Callable
{
public class cl_Callable
{
public static double Get_Variable(string Input)
{
return 0;
}
}
}
- 在新创建的 .dll 文件端:
没什么特别的
namespace namespace_Calculator
{
public class Class_Calculator
{
public static double Start_Calculating()
{
//user defined string[] type calculation inputs
double _1 = 2 + 2;
double _2 = _1 + ns_Callable.cl_Callable.Get_Variable("var1");
return _2;
//user defined string[] type calculation inputs
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。