Com IServiceProvider::QueryService在mfc中返回E_INVALIDARG

Com IServiceProvider::QueryService在mfc中返回E_INVALIDARG,com,mfc,activex,activexobject,Com,Mfc,Activex,Activexobject,我正在开发一个小应用程序。我想嵌入ActiveX控件,并想在mfc应用程序中对其进行远程控制。因为我需要一个COM的IServiceProvider接口IServiceProvider提供对IWMPMRemoteMediaAccess接口的访问。 为此,我使用以下方法: 但它每次都返回E_INVALIDARG。谁能告诉我出了什么问题 IOleObject* oleObject; CComPtr<IServiceProvider> m_spProvider; CComPtr<

我正在开发一个小应用程序。我想嵌入ActiveX控件,并想在mfc应用程序中对其进行远程控制。因为我需要一个COM的
IServiceProvider
接口
IServiceProvider
提供对
IWMPMRemoteMediaAccess
接口的访问。 为此,我使用以下方法:

但它每次都返回
E_INVALIDARG
。谁能告诉我出了什么问题

IOleObject* oleObject;
CComPtr<IServiceProvider>   m_spProvider;
CComPtr<IWMPRemoteMediaServices> m_spServices;

HRESULT hr = CoCreateInstance(__uuidof(WindowsMediaPlayer), 0, CLSCTX_INPROC_SERVER, IID_IOleObject, (void**)&oleObject);

hr = oleObject->QueryInterface(__uuidof(IServiceProvider), (void**)&m_spProvider);
if(SUCCEEDED(hr))
{
//Here It return E_INVALIDARG (hr = E_INVALID_ARG)
hr = m_spProvider->QueryService(__uuidof(IWMPRemoteMediaServices), IID_IServiceProvider,   (void**)&m_spServices);

}
IOleObject*oleObject;
货币供应者;
c采购m_spServices;
HRESULT hr=CoCreateInstance(\uuuuIdof(WindowsMediaPlayer),0,CLSCTX\uInProc\u服务器,IID\uIoleObject,(void**)和oleObject);
hr=oleObject->QueryInterface(uu uuidof(IServiceProvider),(void**)和m_spProvider);
如果(成功(hr))
{
//这里它返回E_INVALIDARG(hr=E_INVALID_ARG)
hr=m_-sprovider->QueryService(u-uuidof(iwmpmremotemediaservices)、IID_-IServiceProvider(void**)和m_-spServices);
}
我不明白哪个论点是错误的。我对第一个论点更为肯定。有人能告诉我可能是什么吗


谢谢

iwmpmpmremotemediaservices
是您应该在您这边实现的接口,而不是通过
QueryService
进行查询:

启用远程嵌入 要启用Windows Media Player控件的远程嵌入,您的程序必须实现IServiceProvider和IWMPDremoteMediaServices接口。IServiceProvider是一个标准组件对象模型(COM)接口,具有一个名为QueryService的方法。Windows Media Player调用此方法来检索指向IWMPMRemoteMediaServices接口的指针

然后WMP将调用此接口的方法,即您实现的方法。您显示的代码试图获取WMP的IServiceProvider和控件实现的服务。反之亦然,这就是WMP将要做的——它将发现您实现的服务


查看您的类的外观。

Sry我刚刚编辑了查询。有一个额外的行代码被弄错了。它仍在出错。你能帮助我吗?你仍在试图(在你的代码片段中)找到这个接口,而你需要实现它,并使它可用和可发现。Roman R.,我面临的问题是如何将'QueryService
的第一个参数的值放入。MSDN说它应该是
REFGUID(服务的唯一标识符)`。你们能告诉我这是什么吗?所以我告诉你们:你们不能通过替换论点来修正它。您需要在自己的方面实现接口,然后WMP会要求您实现。Roman R.,我对这个主题不熟悉。你能给我一些我知道如何实现这些接口的链接吗。这对我有帮助。