2

我有一个这样的javascript代码:

  o = new ActiveXObject("ASDFsome.Application");
  utilites = WScript.CreateObject("ASDF.Utilites.UTF.Converter")
  utilites.Convert(outFile, xmlProp.xml)

现在我想用 C# 代码重写它。我应该如何在 Net 中使用 ActiveXObject?

4

2 回答 2

9

这在很大程度上是动态关键字被添加到 C# 版本 4 的原因:

dynamic utilites = Activator.CreateInstance(Type.GetTypeFromProgID("ASDF.Utilites.UTF.Converter"));
utilites.Convert(outFile, xmlProp.xml);

如果您坚持使用早期版本,那么使用 VB.NET 类库是最好的方法。它直接支持脚本代码中使用的 CreateObject() 函数。

最后但同样重要的是,与您一直使用的脚本语言不同,C# 和 VB.NET 都支持早期绑定。首先添加对类型库的引用,Project + Add Reference,然后使用 COM 选项卡或浏览选项卡选择包含类型库的 .tlb 或 .dll 文件。如果组件设计为仅用于后期绑定脚本语言,您可能没有。我们无法帮助您找到供应商或作者知道的正确类型库。

最后但并非最不重要的是,这闻起来像一个知道如何读取 utf-8 编码的 XML 文件的实用程序。System.Xml 命名空间已经在 .NET 中得到了很好的支持。

于 2012-10-11T12:55:15.650 回答
2

一种可能性是使用反射:

var utilitiesType = Type.GetTypeFromProgID("ASDF.Utilites.UTF.Converter");
var instance = Activator.CreateInstance(utilitiesType);
utilitiesType.InvokeMember(
    "Convert", 
    BindingFlags.InvokeMethod | BindingFlags.Public, 
    null, 
    instance, 
    new[] { "outputFile", "xmlProp.xml" }
);

另一种可能性是为 COM 对象生成强类型代理。右键单击您的项目,添加引用 -> COM 选项卡 -> 在列表中选择 COM 对象或从其 DLL 加载它。然后,Visual Studio 将为此 COM 对象生成一个强类型包装的程序集,并自动将其添加为引用。接下来,您可以直接使用 COM 对象并保持其强类型。

于 2012-10-11T11:17:37.270 回答