将参数传递给COM接口

时间:2012-09-04 14:21:15

标签: c# com

我正在尝试编写一个小的c#应用程序来测试COM接口(也用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文件)。任何人都可以在我使用参数时看到错误吗?

1 个答案:

答案 0 :(得分:0)

我发现类库不使用app.config,这意味着我的COM无法访问其任何设置(连接字符串等),并且在我返回它们之前丢失了我看不到的错误作为try / catch的一部分。

所以答案是在这种情况下使用参数是正确的。