调用之间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。
首先,为了在方法调用之间保留其值,字段不需要是静态的(只有在方法内部声明的变量具有该属性)。静态意味着字段属于类,而不属于类的任何实例,并且只有一个字段实例,由类的所有实例共享(甚至可以在不创建类实例的情况下访问,如Class.field
)。有关更多信息,请参阅字段和静态字段。
第二,我不明白你如何期望transformerXsltPath字段被修改,当你不修改它的任何地方(它是私有的,这意味着它不能被修改类之外)。