当前位置: 代码迷 >> 多媒体/流媒体开发 >> 怎么调用一个COM中的函数
  详细解决方案

怎么调用一个COM中的函数

热度:934   发布时间:2013-02-26 00:00:00.0
如何调用一个COM中的函数?
最近在做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返回此接口 -> 调用
  相关解决方案