CAxWindow接口CreateControl()有時候返回“類別已存在”錯誤,是什么原因?


我要在自己的程序里嵌入Windows Media Player播放控件,操作方法如下:
在父窗口上創建CAxWindow類型子窗口,然后在子窗口上創建Windows Media Player控件,代碼如下
    CAxWindow m_wndView;
    CComPtr<IAxWinHostWindow> spHost;
    HRESULT hr;
    m_wndView.Create( hWndParent, rect, NULL, dwStyle | WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN);
    hr = m_wndView.QueryHost(&spHost);
    if (FAILMSG(hr))
        goto FAILURE;
    hr = spHost->CreateControl(CComBSTR(_T("{6BF52A52-394A-11d3-B153-00C04F79FAA6}")), m_wndView.m_hWnd, 0);
    if (FAILMSG(hr))    // 有時候返回錯誤0x80070582,“類別已存在”
        goto FAILURE;
    ......
第一執行總是成功的,但是關閉窗口后再次進入時,有時候CreateControl()就會返回“類別已存在”錯誤,經過斷點調試確定在關閉父窗口時已經調用了m_wndView的Close()函數。請問這是怎么回事呢?以上代碼是按照WMP SDK里的示例代碼修改的,對ATL和COM還不是很熟。懇請大家指教。謝謝!

6 个解决方案

#1


都沒人來看看啊,這問題卡了好久了一直不能提交,誰有空幫忙看看啊

#2


HWND hWnd = m_wndView.Create( hWndParent, rect, NULL, dwStyle  ¦ WS_CHILD  ¦ WS_VISIBLE  ¦ WS_CLIPCHILDREN); 
這個成功了嗎?
檢查 hWnd .

#3


確保父窗口銷毀時要調用m_wndView.DestroyWindow(),如果外部保存了播放控件的接口指針,要首先Release

#4


謝謝greenabc的熱心回答,前面的步驟我都檢查過了,每一步都成功了的。我懷疑是不是關閉窗口的時候有資源沒有釋放呢?

#5


這么幾天了,別沉啊!

#6


后來這個問題有解決了么。

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com