Я делаю приложение C#, которое использует сетевой решетку OpenDSS через свой COM-интерфейс.Поднять несколько экземпляров COM-приложения
Возможно запустить несколько автономных экземпляров OpenDSS.
Я реализовал ICloneable, чтобы попытаться получить несколько COM экземпляров вместо одного без успеха:
/// <summary>
/// Actual OpenDSS instance
/// </summary>
[Serializable]
public class OpenDSS_Instance : ICloneable {
public string InstanceName { get; set; }
private DSS DSSobj;
private Text DSSText;
private Circuit DSSCircuit;
private Solution DSSSolution;
private CtrlQueue DSSControlQueue;
/// <summary>
/// Constructor
/// </summary>
/// <param name="instancename"></param>
public OpenDSS_Instance(string instancename) {
InstanceName = instancename;
}
/// <summary>
/// Return a clone of this class
/// </summary>
/// <returns></returns>
public object Clone() {
return this.MemberwiseClone();
}
/// <summary>
/// Starts OpenDSS
/// </summary>
public int Start_ODSS_Instance() {
DSSobj = new DSS();
if (!(DSSobj.Start(0))) {
App.func.msgboxErr("DSS [" + InstanceName + "] failed to start.\nDoes the computer has OpenDSS installed?", "OpenDSS");
return 1;
} else {
App.func.dmessage("DSS [" + InstanceName + "] started sucessfully");
DSSText = DSSobj.Text;
DSSCircuit = DSSobj.ActiveCircuit;
DSSSolution = DSSCircuit.Solution;
DSSControlQueue = DSSCircuit.CtrlQueue;
return 0;
}
}
}
Затем я создаю список экземпляров этого класса из другого класса, как это:
List<OpenDSS_Instance> OpenDSS = new List<OpenDSS_Instance>();
public int startInstances() {
//Initialize an OpenDSS instance per logical processor
int err_num = 0;
OpenDSS_Instance odss = new OpenDSS_Instance("original");
for (int i = 0; i < instance_number; i++) {
this.OpenDSS.Add((OpenDSS_Instance)odss.Clone());
this.OpenDSS[i].InstanceName = "ODSS_" + i;
err_num += this.OpenDSS[i].Start_ODSS_Instance();
}
return err_num;
}
Моя проблема заключается в том, что список экземпляров - это не копии, а повторы для одного и того же экземпляра.
Независимо от того, что я сделал, как создать несколько экземпляров COM-интерфейса?
(я надеюсь, что я объяснил, что этот вопрос достаточно ясно)
Любая помощь приветствуется.
примечание: я не компьютерный инженер.
Вы не можете глубоко-клонировать ссылку на COM-интерфейс, если он вообще поддерживается COM-сервером, тогда он будет выставлять один из интерфейсов IPersist. Коэффициенты низки, ноль, если это интерфейс автоматизации «Application». Вы должны быть «компьютером» инженер », чтобы сделать снимок. Сначала попросите поставщика о поддержке. –
Как вы думаете, можно ли использовать более одного экземпляра проекта, на который делается ссылка, в пределах soution? –