2010-04-22 5 views
3

알 수없는 인터페이스에서 RCW 참조 횟수를 늘릴 수 있습니까? (즉,없는 기본 COM 개체에 참조 카운트) 나는 오래된 COM 서버 코드COMref에 대한 추가 참조

int Method1(object comobject) { 
    try { 
     // do something with comobject 
     return 0; 
    } 
    finally { 
     Marshal.ReleaseComObject(comobject); 
    } 
} 

이 코드는 잘 작동하지만 지금은 다른 방법에서 호출 할 필요를 가지고

.

int Method2(object comobject) { 
    int result = Method1(comobject); 
    // Do something with combject 
} 

다양하여 ComObject의 유형 (이 객체가 그 이유이다)

답변

0

비록 Marshal.AddRef() 메소드 잘못된 참조 횟수 변화가있다. 나는 RCW 카운트를 직접 증가시킬 수 없다고 확신한다. 자신이 속한 깊은 구멍을 파고 오래된 코드를 수정하십시오.

8

여기 입니다. RCW 카운트는 개체가 마샬링 된 횟수를 계산하여 추가 마샬링을 수행하여이 수를 늘릴 수 있습니다. 나는이 방법을 사용하는 것이 좋습니다 것입니다 확실하지 않다

public static T AddRcwRef<T>(T t) 
{ 
    IntPtr ptr = Marshal.GetIUnknownForObject(t); 
    try { 
     return (T)Marshal.GetObjectForIUnknown(ptr); 
    } 
    finally { 
     Marshal.Release(ptr); // done with the IntPtr 
    } 
} 

, 그것은 시도하고 ReleaseComObject 호출을 제거 아마 좋습니다.

자세한 내용은이 blog post on the subject을 참조하십시오.

관련 문제