繁体   English   中英

在C#中使用ActiveX

[英]Use ActiveX in C#

我有一个像这样的JavaScript代码:

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

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

这在很大程度上归功于为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选项卡或Browse选项卡来选择包含类型库的.tlb或.dll文件。 如果组件设计为仅使用后期绑定脚本语言,则可能没有。 我们无法帮助您找到合适的类型库,供应商或作者会知道。

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

一种可能性是使用反射:

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对象并保持其强类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM