1

我正在使用 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吗?”。

提前致谢。

4

1 回答 1

1

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因此开销可能很小。因此,如果您担心它是必需的,我会这样做。

于 2009-08-21T03:36:20.997 回答