- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试在我的 Win32 应用程序中嵌入一个 WMP 控件。我在这里遵循了示例代码:Hosting the Windows Media Player Control in a Windows Application
但是,当我单步执行这个示例时,该行:
hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView, 0);
返回 E_NOINTERFACE;
行:
hr = m_wndView.QueryHost(&spHost);
成功并且似乎正确填充了 spHost。
代码如下:
CAxWindow m_wndView;
CComPtr<IObjectWithSite> spHostObject;
CComPtr<IAxWinHostWindow> spHost;
CComBSTR classID = __uuidof(WindowsMediaPlayer);
RECT rcClient = { 0, 0, 560, 335 };
m_wndView.Create(m_hWnd, rcClient, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
hr = m_wndView.QueryHost(&spHost);
if( SUCCEEDED(hr) )
{
hr = spHost->CreateControl(classID, m_wndView, 0); //E_NOINTERFACE
}
hr = m_wndView.QueryControl(&m_spPlayer); //E_FAIL
谁能告诉我为什么会发生这种情况?谢谢。
编辑:实际失败的行是 ActivateAx() 函数中的这一行:
hr = m_spOleObject->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, spClientSite, 0, m_hWnd, &m_rcPos);
如果有人能进一步阐明这一点,那就太好了。
Edit2:刚刚注意到我在单步执行这段代码时在输出窗口中收到垃圾邮件:
“无法进行传出调用,因为应用程序正在调度输入同步调用”有什么想法吗?
最佳答案
代码是正确的,可以按原样工作,并且按照 MSDN 页面上的建议。
如果您的 UI 窗口位于 MTA 单元中,则可能会出现与描述完全相同的问题,即您正在运行的线程是使用 CoInitializeEx(NULL, COINIT_MULTITHREADED)
初始化的。
接下来会发生什么,您的 WMP 在侧 STA 线程上实例化,其接口(interface)编码到您的线程/单元中。并不是每个必需的接口(interface)都可以通过这种方式传输,所以一旦你继续初始化它,一些必需的接口(interface)就会丢失......
WMP 使用“单元”线程模型,在 STA 线程上使用它。
关于c++ - 尝试在 CAxWindow 中托管 WMP 时,IAxWinHostWindow CreateControl 返回 E_NOINTERFACE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699887/
我有一个COM客户端和一个COM服务器,COM服务器持有客户端暴露的接口(interface),现在客户端实际上只是一个EXE,我如何确保客户端暴露的接口(interface)对服务器可见? 因为当我
我正在从 C++ 非托管代码调用 C# 方法。我在从数组中返回的类实例获取值时遇到问题。 我稍微简化了代码 这是有问题的方法。 [return: MarshalAs(UnmanagedType
我正在尝试在现有 COM 组件中构建连接点。我从 CCmdTarget 派生类,并按照 MSDN 中的描述在类声明和实现中调用 MFC 宏。组件已正确构建、链接和运行。但是,当我调试我的客户端应用程序
我正在尝试为我拥有的 COM 对象(名为 SC_COM.dll)生成 C# 包装器,但在将它与 Visual Studio 2008(运行 Vista)链接时遇到一些问题。我需要使用 COM DLL
我已经成功编译并注册了一个直接显示过滤器。现在我想在我的代码中使用它。但是对 COCreateInstance 的调用返回错误代码 E_NOINTERFACE。 这是我的过滤器的注册码 #inclu
注意: 使用 CoGetClassObject , 通过在系统注册表中有 CLSID 的类对象创建多个对象 单线程单元 例如: hresult = CoInitializeEx(NULL, COINI
在我使用 DirectX11 设计的渲染器中,我需要能够随时创建交换链,但是我使用的方法在 CreateSwapChain() 调用时崩溃了: IDXGIDevice * device;
我正在尝试创建一个指定的 D3D12 设备 https://msdn.microsoft.com/en-us/library/dn899120%28v=vs.85%29.aspx 我有 NVidia
我刚刚开始使用 Dx11。 D3DX11CreateEffectFromMemory 正在返回 E_NOINTERFACE。 我知道 E_NOINTERFACE 在 COM 方面意味着什么,但我不知道
我负责 C# 应用程序 (VS 2005) 的维护。此 C# 应用程序调用一个 dll(“mydll.dll”)。我需要对有问题的 dll 进行一些更改。 我有一个用 Visual Basic 6.0
我正在使用 CoCreateInstance 函数创建与指定 CLSID 关联的类的单个对象。它返回 E_NOINTERFACE。 我检查了注册表,CLSID 是正确的。被调用对象dll的路径在注册表
我正在尝试从我的集成相机上的输出引脚检索 IAMStreamConfig 接口(interface),但是 E_NOINTERFACE 失败。 我将 IntCam 用作测试设备,实际上我将有一个带有两
我已经搞不清是应该从我的 COM 服务器方法返回 E_NOTIMPL 还是 E_NOINTERFACE。 我有一个类有两个函数,我从我继承的类中覆盖了这两个函数,这两个函数什么都不做,因为它们目前还没
我有一个 COM 类 CMyCOMServer 在一个应用程序中实现了 IMyInterface,两者都具有正确的 GUID。如果请求 IUnknown 或 IMyInterface,CMyCOMSe
我有一个由 VB6 COM 对象实现的接口(interface) (ITask)。我有一个使用该接口(interface)的 C++ COM 对象,它通常工作正常。 但是,当我运行 VB6 调试器来调
我正在尝试从 64 位应用程序创建 32 位 COM 对象。 我在 CoCreateInstance 调用中使用了 CLSCTX_LOCAL_SERVER,并且我向 AppId 添加了一个空的 Dll
我一直在尝试制作一个利用桌面复制 api 的应用程序,但没有使用 directx 的经验,结果证明这是一个相当大的挑战。似乎一切正常,直到我调用 output1->DuplicateOutput(),
嗨 Stack Overflow 成员, 我是 C# 编程的新手。我正在开发一个基本的相机流和静态捕获应用程序。一旦用户静止不动,我将使用 VMR9 的位图混合概念在叠加层上显示它。 我做了什么? 我
我正在尝试使用 IFileSystemImage2 接口(interface)使用 Imapi2 创建具有多个引导记录的 ISO。 为此,我应该能够使用 put_BootImageOptionsArr
我正在尝试在我的 Win32 应用程序中嵌入一个 WMP 控件。我在这里遵循了示例代码:Hosting the Windows Media Player Control in a Windows Ap
我是一名优秀的程序员,十分优秀!