2013-06-11 2 views
2

코드를 테스트하는 동안 이상한 행동을 보았습니다.ReleaseComObject가 정적 메서드에서 작동하지 않습니다.

이 :

if (_sampGrabber != null) 
{ 
    Marshal.ReleaseComObject(_sampGrabber); 
    _sampGrabber = null; 
} 

수율 _sampGrabber == NULL, 반면 후

ReleaseIfNotNull(_sampGrabber); 

public static int ReleaseIfNotNull(object comObject) 
{ 
    int hr = 0; 

    if (comObject != null) 
    { 
     hr = Marshal.ReleaseComObject(comObject);     
     comObject = null; 
    } 
    return hr; 
} 

_sampGrabber를 이용한 다이렉트 SampleGrabber 필터 인터페이스 때 _sampGrabber는 여전히는 오리지널 값을 갖는다 .

이 동작에 대한 설명에 관심이 있습니다. Visual Studio Test Framework를 사용하여 테스트를 작성하면이 문제가 발생했습니다. 단지 자신의 (스택) 사본에 영향을

public static int ReleaseIfNotNull(ref object comObject) 

ReleaseIfNotNull 내부 comObject 로컬 참조를 변경하지 않습니다 : 당신이 참조를 변경해야하는 경우

답변

4

, 당신과 같이 서명을 변경해야합니다 다른 참조에 영향을줍니다. MSDN에서 ref and out

관련 문제