【问题标题】:static C# object causes: COM object that has been separated from its underlying RCW cannot be used静态 C# 对象原因:无法使用已与其底层 RCW 分离的 COM 对象
【发布时间】:2012-09-17 13:39:12
【问题描述】:

我有一个从外部 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();   
    }
}

【问题讨论】:

  • 您需要记录如何在代码中使用线程。

标签: c# exception com rcw


【解决方案1】:

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

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

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

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

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

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 2012-04-27
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    相关资源
    最近更新 更多