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

これが、 dynamicキーワードが C# バージョン 4 に追加された理由の一部ではありません。

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

以前のバージョンに行き詰まっている場合は、VB.NET クラス ライブラリを使用するのが最善の方法です。スクリプト コードで使用される CreateObject() 関数を直接サポートします。

最後になりましたが、これまで使用してきたスクリプト言語とは異なり、C# と VB.NET の両方が事前バインディングをサポートしています。まず、タイプ ライブラリへの参照を追加し、[プロジェクト + 参照の追加] を実行し、[COM] タブまたは [参照] タブを使用して、タイプ ライブラリを含む .tlb または .dll ファイルを選択します。コンポーネントが遅延バインディング スクリプト言語からのみ使用されるように設計されている場合は、1 つも存在しない可能性があります。そうでなければ、適切なタイプ ライブラリを見つける手助けをすることはできません。ベンダーや作成者は知っているでしょう。

本当に最後になりましたが、これは utf-8 でエンコードされた XML ファイルを読み取る方法を知っているユーティリティのようなにおいがします。これは、System.Xml 名前空間を使用して .NET で既に十分にサポートされています。

于 2012-10-11T12:55:15.650 に答える
2

1 つの可能性は、リフレクションを使用することです。

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" }
);

もう 1 つの可能性は、COM オブジェクトの厳密に型指定されたプロキシを生成することです。プロジェクトを右クリックし、[参照の追加] -> [COM] タブ -> リストから COM オブジェクトを選択するか、その DLL から読み込みます。Visual Studio は、この COM オブジェクトの厳密に型指定されたラップされたアセンブリを生成し、参照として自動的に追加します。次に、強い型付けを維持することで、COM オブジェクトを直接操作できます。

于 2012-10-11T11:17:37.270 に答える