Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在现代C代码中执行托管VBScript_C#_Vbscript_Vb6 Migration_Codefluentruntimeclient - Fatal编程技术网

C# 在现代C代码中执行托管VBScript

C# 在现代C代码中执行托管VBScript,c#,vbscript,vb6-migration,codefluentruntimeclient,C#,Vbscript,Vb6 Migration,Codefluentruntimeclient,问题: 哪个免费或商用脚本主机可以在针对64位体系结构的C应用程序中运行VBScript 背景: 现在是2017年第3季度——这个主题之前已经被提出过很多次,但几乎没有什么结论,而且许多旧的代码示例不再有效 我正在将一个旧的vb6 COM dll迁移到c service Dot Net framework 4.6.1+。vb6 dll的一个功能是通过MS脚本控件msscript.ocx进行扩展。这允许用户编写小型VB脚本,以便在严格的约束条件下修改应用程序的行为。它很有效,所以我们不必为它辩护

问题:

哪个免费或商用脚本主机可以在针对64位体系结构的C应用程序中运行VBScript

背景:

现在是2017年第3季度——这个主题之前已经被提出过很多次,但几乎没有什么结论,而且许多旧的代码示例不再有效

我正在将一个旧的vb6 COM dll迁移到c service Dot Net framework 4.6.1+。vb6 dll的一个功能是通过MS脚本控件msscript.ocx进行扩展。这允许用户编写小型VB脚本,以便在严格的约束条件下修改应用程序的行为。它很有效,所以我们不必为它辩护

新的c服务必须是64位应用程序。msscript.ocx是32位AFAIK。理想情况下,我们将尽可能少地使用msscript.ocx

注:

Powershell可能不是一个好的替代品,因为它会让用户访问潘多拉盒子的功能。 我已经看到对codefluent客户端的引用是一个潜在的直接替换,但找不到示例代码。vbscript是否支持此产品? 通过某种shell方法将vbscript作为文件执行被认为是不可行的,因为脚本必须能够回调到C主机以请求变量。 ActiveXScriptLib是一个潜在的应用程序。它有一个通过VisualStudio安装的NuGet包,给出的示例在x64中对我有用,包括一个更复杂的示例,即让脚本访问托管c的指定方法。 研究说明:

自从微软推出第一个64位操作系统以来,这条路一直走得很好,但是大部分示例代码不再在当前的C语言中运行

示例代码

作为临时修复,是否有人可以提供示例代码,以便在可以使用msscript.ocx的C 64位应用程序中使用?如果可以访问msscript.ocx,则此示例“将”起作用-我发现错误:

System.Runtime.InteropServices.COMException:“检索CLSID为{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}的组件的COM类工厂失败,原因是以下错误:80040154类未注册HRESULT异常:0x80040154 REGDB_E_CLASSNOTREG。”


编辑:请参见注释中添加到列表中的第4项-显示一些潜力。

因为您在问题中提到了CodeFluent实体,是的,它支持VBScript。您可以查看stackoverflow中的前一个条目,了解非常高级的场景,或是其中一个非常简单的示例,还提到了从nuget从何处获取此Codefluent运行时客户端。

您正在寻找Microsoft。感谢@Kul Tigin-查看了链接,发现它是一个活动项目,最近提交的内容看起来很好。还支持VBScript,所以另一个加号。感谢MCR-我们即将进入项目的这一部分,我会回来报告。
public void TestScript()
{
    Type scriptType = Type.GetTypeFromCLSID(Guid.Parse("0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC"));
    dynamic obj = Activator.CreateInstance(scriptType, false);
    obj.Language = "vbscript";
    string vbscript = "2 * 2";
    var res = obj.Eval(vbscript);
    System.Diagnostics.Trace.WriteLine(res);
}