gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:54:50 25 4
gpt4 key购买 nike

我有一个从外部 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com