2

外部 DLL から静的 devDrv を作成する MyObject があります。devDrv が MyObject コンストラクターによって作成された場合。コードは正常に動作します。devDrv が MyObject.Connect (以下の 2 番目のオブジェクトを参照) の 1 つによって作成された場合、MyObject.Connect() への最初の呼び出しは正常に機能します。2 回目の呼び出しで、「基になる RCW から分離された COM オブジェクトは使用できません」というエラーが表示されます。devDrv は永続的ではないようです。以下の 2 番目のオブジェクトに示すように、この 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();   
    }
}
4

1 に答える 1

1

static constructorこの方法の代わりに作成します

 public class MyObject
 {
   static ExtDeviceDriver devDrv;

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

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

しかし、問題はExtDeviceDriverあなたのコードではなく、2回接続することを許可されていないようです.

于 2012-09-26T00:58:34.390 に答える