调用之间COM对象的状态不一致

本文关键字:状态 不一致 对象 之间 COM 调用 | 更新日期: 2023-09-27 18:01:30

我有一个。net COM对象,我用来从C代码调用。

[EventTrackingEnabled(true)]
[ComVisible(true)]
public class ComObject : IComObject
{
    private static XslCompiledTransform transformer = null;
    private static string transformerXsltPath = null;
    private static string TransformerXsltPath 
    {
        get
        {
            return transformerXsltPath;
        }
        set
        {
            transformerXsltPath = value;
        }
    }
    private static XslCompiledTransform Transformer
    {
        get
        {
            return transformer;
        }
        set
        {                
            transformer = value;                
        }
    }
    [ComVisible(true)]
    public bool TransformXML(String inputPath, String xsltPath, String outputPath)
    {       
        // ....
        if (Transformer == null || xsltPath != TransformerXsltPath)
        {
            Transformer = new XslCompiledTransform(true);
            Transformer.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());
        }
        // ...
    }
}

我想保持com对象的状态,只要我调用这个方法。通过静态成员。因此,当我再次调用它时,状态成员将被初始化。

但问题是,只有Transformer对象在第二次调用中保持初始化,但transformerXsltPath字符串重新启动为null。

调用之间COM对象的状态不一致

首先,为了在方法调用之间保留其值,字段不需要是静态的(只有在方法内部声明的变量具有该属性)。静态意味着字段属于类,而不属于类的任何实例,并且只有一个字段实例,由类的所有实例共享(甚至可以在不创建类实例的情况下访问,如Class.field)。有关更多信息,请参阅字段和静态字段。

第二,我不明白你如何期望transformerXsltPath字段被修改,当你不修改它的任何地方(它是私有的,这意味着它不能被修改类之外)。