最近在做directshow的开发,使用windows sdk里面的一个pushsource 的bitmapsets filter。大家都知道的是个COM组件。但是我现在想要调用这个COM里面的一些函数,不知道要怎么去实现呢?
我的dll.def文件里面有
EXPORTS
DllMain PRIVATE
DllGetClassObject PRIVATE
DllCanUnloadNow PRIVATE
DllRegisterServer PRIVATE
DllUnregisterServer PRIVATE
然后在dll.cpp中写了
STDAPI DllRegisterServer()
{
HRESULT hr;
IFilterMapper2 *pFM2 = NULL;
hr = AMovieDllRegisterServer2(TRUE);
if (FAILED(hr))
return hr;
hr = CoCreateInstance(CLSID_FilterMapper2, NULL, CLSCTX_INPROC_SERVER,
IID_IFilterMapper2, (void **)&pFM2);
if (FAILED(hr))
return hr;
hr = pFM2->RegisterFilter(
CLSID_PushSourceBitmap, // Filter CLSID.
g_wszFilterName, // Filter name.
NULL, // Device moniker.
&CLSID_VideoInputDeviceCategory, // Video compressor category.
g_wszFilterName, // Instance data.
&rf2FilterReg // Pointer to filter information.
);
在这里我想要通过返回的pFM2指针去指向COM内部的函数,从而来进行调用。
pFM2->....
但是只暴露出来以下六个函数出来
addref();
CreateCategory();
EnumMatchingFilters();
QueryInterface();
RegisterFilter();
Release();
UnregisterFilter();
但是我找不到我需要的内部函数的名称。
---------------------------------------------------
pFM2->Release();
return hr;
}
不知道谁有遇到过这个问题,多谢各位,帮忙顶上去!
------解决方案--------------------------------------------------------
通过QueryInterface();取得接口对象,再通过该接口调用你想要的函数。
------解决方案--------------------------------------------------------
New COM -> 根据IID传入QueryInterface返回此接口 -> 调用