blog newbie

C# programmer with directshow

博客园 首页 新随笔 联系 订阅 管理
public static IBaseFilter AddFilterByDevicePath(IGraphBuilder graphBuilder, string devicePath, string name) 

int hr = 0
IBaseFilter filter; 
UCOMIBindCtx bindCtx; 
UCOMIMoniker moniker; 
int eaten; 
 
hr 
= NativeMethods.CreateBindCtx(0out bindCtx); 
Marshal.ThrowExceptionForHR(hr); 
 
hr 
= NativeMethods.MkParseDisplayName(bindCtx, devicePath, out eaten, out moniker); 
Marshal.ThrowExceptionForHR(hr); 
 
hr 
= (graphBuilder as IFilterGraph2).AddSourceFilterForMoniker(moniker, bindCtx, name, out filter); 
DsError.ThrowExceptionForHR(hr); 
 
Marshal.ReleaseComObject(bindCtx); 
Marshal.ReleaseComObject(moniker); 
 
return filter; 
}
 

很简单.需要手工加入CreateBindCtx和MkParseDisplayName这两个API函数(ole32.dll)
[DllImport("ole32.dll")] 
public static extern int CreateBindCtx(int reserved, out UCOMIBindCtx ppbc); 
 
[DllImport(
"ole32.dll")] 
public static extern int MkParseDisplayName(UCOMIBindCtx pcb, [MarshalAs(UnmanagedType.LPWStr)] string szUserName, out int pchEaten, out UCOMIMoniker ppmk); 
posted on 2005-09-27 10:00  haijer  阅读(1232)  评论(0编辑  收藏  举报