2

COM インターフェイスをテストする小さな c# アプリケーションを作成しようとしています (これも c# で作成されています)。インターフェイスには、単一の文字列をパラメーターとして受け入れるメソッドが含まれています。

以下にいくつかのコードサンプルを含めました。以下を使用して呼び出しを実行します。

public class CreateObject
{
    private Type comType;
    public object comObject;

    public CreateObject(string ProgID)
    {
        comType = Type.GetTypeFromProgID(ProgID);
        comObject = Activator.CreateInstance(comType);
    }
    public void Execute(string Method, params object[] Parameters)
    {
        comType.InvokeMember(Method, BindingFlags.InvokeMethod, null, comObject, Parameters);
    }
}

次に、次を使用して実行します。

String sParam = "test";
CreateObject obj = new CreateObject("Namespace.Class");          
obj.Execute("Method", sParam );

COM 内では、インターフェイスは次のようになります。

[InterfaceType(ComInterfaceType.InterfaceIsDual), Guid("xxxxxx-xxxx-xxxx-xxxx-xxxxxx")]
public interface Interface
{
    void Method(String sParam);
}

Method(String) の単純化された実装:

[ClassInterface(ClassInterfaceType.None), Guid("xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"), ProgId("Namespace.Class")]
public class Class: Interface
{
    public void Method(String sParam)
    {
        XmlDocument xml = new XmlDocument();
        xml.LoadXml(sParam);
        XmlWriter writer = XmlWriter.Create("result.xml");

        *** other code used to create the xml ***
    }
}

エラーは返されませんが、COM は実際には実行されていないようです。ただし、テスト アプリと COM の両方から文字列パラメーターを取得すると、正しい出力が得られます (COM インターフェイスはディスク上に XML ファイルを作成します)。パラメータの使用に誤りがあることは誰にもわかりますか?

4

1 に答える 1

0

クラス ライブラリが app.config を使用していないことがわかりました。これは、COM がその設定 (接続文字列など) にアクセスできなかったことを意味し、エラーをスローしました。トライ/キャッチ。

したがって、この場合のパラメーターの使用は正しかったというのが答えです。

于 2012-09-10T11:02:09.403 に答える