2010-04-22 1 views
3

Возможно ли увеличить счетчик ссылок RCW на неизвестном интерфейсе? (т.е. не счетчик ссылок на базовый объект COM)Addref on COM RCW

У меня есть какой-то старый код COM-сервер

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

Там is путь, количество 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 Я написал.

 Смежные вопросы

  • Нет связанных вопросов^_^