2

我有一个从外部 DLL 创建静态 devDrv 的 MyObject。如果 devDrv 是由 MyObject 构造函数创建的。代码工作正常。如果 devDrv 是由其中一个 MyObject.Connect 创建的(请参见下面的第二个对象),则第一次调用 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();   
    }
}
4

1 回答 1

1

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

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

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

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

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

于 2012-09-26T00:58:34.390 回答