我有一个MyObject,它从外部DLL创建一个静态devDrv。如果devDrv是由MyObject构造函数创建的。代码工作正常。如果devDrv是由MyObject.Connect之一创建的(请参阅下面的第2个对象),第一次调用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();
}
}
答案 0 :(得分:1)
我会创建static constructor
而不是这种方式
public class MyObject
{
static ExtDeviceDriver devDrv;
static MyObject()
{
devDrv = new ExtDeviceDriver();
}
public void Connect()
{
devDrv.connect();
}
}
但似乎问题来自ExtDeviceDriver
而不是您的代码,可能是您不允许连接两次