c# - 静态 C# 对象导致 : COM object that has been separated from its underlying RCW cannot be used

标签 c# exception com rcw

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

最佳答案

我会创建静态构造函数而不是这种方式

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

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

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

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

关于c# - 静态 C# 对象导致 : COM object that has been separated from its underlying RCW cannot be used,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12593087/

相关文章:

c# - 结合 Interlocked.Increment 和 Interlocked.Exchange

exception - 异常会自动传播吗?

java - 异常(数组索引越界异常)

.net - 如何从 .NET 重新启动远程服务器上的 COM+ 应用程序?

.net - 为什么 VBA 的 VarType 函数说这个 COM 对象是一个字符串? (Object 是 .NET 的 System.Object 类的 COM 版本的实例。)这是一个错误吗?

c# - 在c#中获取具有特定属性值的xml元素

c# List<T> RemoveRange 删除的项目会发生什么?

c# - Windows Phone 7 TextBox.Height = 代码中的自动?

c++ - 如何使用 C/C++ 制作 .com 文件?

java - 我们应该在 Java 中处理未经检查的异常吗?