COM:IMoniker :: BindToObject的IBindCtx *参数可以为NULL吗?

时间:2009-08-21 03:23:56

标签: com directshow

我正在使用IMoniker :: BindToObject函数,我已阅读MSDN上的文章。

文章没有说第一个参数可以是NULL,但是下一页的示例代码使用NULL作为参数:

http://msdn.microsoft.com/en-us/library/dd407292%28VS.85%29.aspx

(hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);)
(hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter);)

因为我不太了解这个参数的使用,我不需要函数返回的额外绑定信息,

我想问一下“参数可以为NULL吗?”。

提前感谢。

1 个答案:

答案 0 :(得分:0)

documentation on BindToObject建议您可以使用CreateBindCtx创建绑定上下文并传递:

HRESULT hr;       // An error code
IMoniker * pMnk;  // A previously acquired interface moniker

// Obtain an IBindCtx interface.
IBindCtx * pbc; 
hr = CreateBindCtx(NULL, &pbc); 
if (FAILED(hr)) exit(0);  // Handle errors here. 

// Obtain an implementation of pCellRange. 
ICellRange * pCellRange; 
hr = pMnk->BindToObject(pbc, NULL, IID_ICellRange, &pCellRange); 
if (FAILED(hr)) exit(0);  // Handle errors here. 

// Use pCellRange here. 

// Release interfaces after use. 
pbc->Release(); 
pCellRange->Release(); 

接口仅描述对象必须支持的行为,而不描述支持它的方式。一方面,实现对象可能要求您传入绑定上下文,否则可能不需要。由于您指向的文档省略了它,因此在您的情况下可能不需要它。

另一方面,创建绑定上下文对象并将其传入来似乎并不是一件大事。你可以将同一个传递给每个BindToObject的调用,这样开销就可能小。因此,如果您担心需要它,我会这样做。