2012-09-26 22 views
2

외부 DLL에서 정적 devDrv를 만드는 MyObject가 있습니다. devDrv가 MyObject 생성자에 의해 생성 된 경우. 코드가 잘 작동합니다. devDrv가 MyObject.Connect (아래 두 번째 개체 참조) 중 하나에 의해 만들어지면 MyObject.Connect()에 대한 첫 번째 호출이 정상적으로 작동합니다. 두 번째 호출에서이 오류 메시지가 나타납니다. "기본 RCW에서 분리 된 COM 개체를 사용할 수 없습니다." devDrv가 지속되지 않는 것 같습니다. 이 devDrv 개체를 아래의 두 번째 개체에서 볼 수있는 MyObject.Connect에 의해 생성하고 싶습니다. 도와 주셔서 감사합니다.정적 C# 개체가 원인 : 기본 RCW에서 분리 된 COM 개체를 사용할 수 없습니다.

// 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(); 
    } 
} 
+1

두 번에 연결할 수 없습니다 수 있습니다 코드에서 스레드를 사용하는 방법을 문서화해야합니다. –

답변

1

내가 static constructor 대신이 방법

public class MyObject 
{ 
    static ExtDeviceDriver devDrv; 

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

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

로 만들 것입니다하지만이 문제가 코드와 ExtDeviceDriver하지으로부터 것 같다, 당신이

관련 문제