IShellWindows*跟SHDocVw:IShellWindowsPtr用过的朋友进

IShellWindows*和SHDocVw::IShellWindowsPtr用过的朋友进
使用SHDocVw::IShellWindowsPtr::CreateInstance 没问题
使用 IShellWindows* m_spSHWinds;       
::CoCreateInstance 空值;
请问是什么原因

另外在  SHDocVw::IShellWindowsPtr::CreateInstance后 可以得到WIN7 X64的IE浏览器的doc 而 x32 IE浏览器得不到.

------解决方案--------------------
::CoInitialize(NULL); 
IShellWindows* m_spSHWinds;       
::CoCreateInstance(CLSID_ShellWindows,NULL,CLSCTX_INPROC_SERVER,IID_IShellWindows,(LPVOID*)&m_spSHWinds);       
    long nCount;   
    CString   str; 
    m_spSHWinds-> get_Count(&nCount);       
    BSTR     Url     ;     
    for(long i = 0;i < nCount;i++)       
    {       
VARIANT va;       
va.vt = VT_I4;       
va.lVal = i;       
IDispatch* spDisp;       
m_spSHWinds-> Item(va,&spDisp);
IWebBrowser2* spBrowser;       
spDisp-> QueryInterface(IID_IWebBrowser2,(void**)&spBrowser);       
if(spBrowser != NULL)       
{       
IHTMLDocument2* spDoc;       
IDispatch* IDispDoc;       
spBrowser->get_Document(&IDispDoc);       
IDispDoc-> QueryInterface(IID_IHTMLDocument2,(void**)&spDoc);        
if(spDoc != NULL)       
{       
spDoc-> get_URL(&Url); 
str = Url; 
MessageBox(str);


    }
return;

------解决方案--------------------
CoInitialize(NULL);
long nRelNum = 0;
SHDocVw::IShellWindowsPtr m_spSHWinds;
if (m_spSHWinds == NULL)
{
if(m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows)) != S_OK)
{
MessageBox(L"Failed");
CoUninitialize();
return ;//nRelNum;
}
}
long nCount = m_spSHWinds->GetCount();
IDispatchPtr spDisp;
for (long i = 0; i < nCount; i++)
{
_variant_t va(i, VT_I4);
spDisp = m_spSHWinds->Item(va);
SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
BSTR name = SysAllocString(L"");
spBrowser->get_FullName(&name);
if (spBrowser != NULL)
{
IDispatchPtr spDisp;   
if(spBrowser->get_Document(&spDisp) == S_OK && spDisp != 0 )  
{
CComQIPtr<IHTMLDocument2> pDoc;
CComQIPtr<IHTMLElementCollection> pElemAll;
spDisp->QueryInterface(IID_IHTMLDocument2,(void**)&pDoc);