簡體   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