静态C#对象原因:无法使用已与其底层RCW分离的COM对象
我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码运行良好。如果devDrv是由MyObject.Connect中的一个创建的(请参见下面的第二个对象),那么对MyObject.Connect()的第一次调用可以正常工作。在第二次调用中,我将得到以下错误:“无法使用已与其基础RCW分离的COM对象”。似乎devDrv不是持久的。我希望这个devDrv对象由MyObject.Connect创建,如下面第二个对象所示。我会感谢你的帮助静态C#对象原因:无法使用已与其底层RCW分离的COM对象,c#,exception,com,rcw,C#,Exception,Com,Rcw,我有一个MyObject,它从外部DLL创建一个静态devDrv。如果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
,而不是您的代码,可能是您不允许连接两次您需要记录如何在代码中使用线程。