static C#object导致:无法使用已与其基础RCW分离的COM对象

时间:2012-09-26 00:47:04

标签: c# exception com rcw

我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码工作正常。如果devDrv是由MyObject.Connect之一创建的(请参阅下面的第2个对象),第一次调用MyObject.Connect()就可以了。在第二次调用时,我将收到此错误:“无法使用已与其基础RCW分离的COM对象”。似乎devDrv不是持久性的。我希望这个devDrv对象由MyObject.Connect创建,如下面的第二个对象所示。我很感激你的帮助。

// this code works fine.
public sealed class MyObject
{
    static ExtDeviceDriver devDrv;

    public MyObject()
    {
        devDrv = new ExtDeviceDriver();
    }

    public void Connect()
    {
        devDrv.connect();   
    }
}

//this code causes exception.
public sealed class MyObject
{
    static ExtDeviceDriver devDrv;

    public MyObject()
    {
        // do not create devDrv here.
        //devDrv = new ExtDeviceDriver();
    }

    public void Connect()
    {
        if (devDrv == null)
            devDrv = new ExtDeviceDriver();
        devDrv.connect();   
    }
}

1 个答案:

答案 0 :(得分:1)

我会创建static constructor而不是这种方式

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

  static MyObject()
  {
    devDrv = new ExtDeviceDriver();
  }

  public void Connect()
  {
    devDrv.connect();   
  }
 }

但似乎问题来自ExtDeviceDriver而不是您的代码,可能是您不允许连接两次