读书人

怎么调用一个COM中的函数

发布时间: 2012-04-20 15:27:03 作者: rapoo

如何调用一个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返回此接口 -> 调用

读书人网 >多媒体

热点推荐