Вам нужно написать интерфейс на C # и использовать атрибут ComImport. Например, пример фильтра из SDK будет выглядеть
[ComImport,
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
Guid("fd5010a3-8ebe-11ce-8183-00aa00577da1")] //guid defined for interface in example code
public interface IIPEffect
{
[PreserveSig]
int get_IPEffect(out int effectTime, out double startTime, out double length);
[PreserveSig]
int set_IPEffect(int effectNum, double startTime, double length);
}
Теперь вы можете использовать определение интерфейса таким способом
//find IBaseFilter somehow
var effectFilter = FindFilter() as IIPEffect;
effectFilter.set_IPEffect(0, 0, 20);
ПРИМЕЧАНИЕ : в определении интерфейса есть тип REFTIME
как параметр для длины и startTime, но это просто typedef, и поэтому в нашем коде это double
. Для получения дополнительной информации о преобразовании определения интерфейса в C # вы можете прочитать статью marshaling на msdn