STDMETHODIMPCDocHostSite::XServiceProvider
::QueryService(REFGUIDguidService,
REFIIDriid,
void**ppvObject)
{

if(guidService==SID_SInternetSecurityManager&&
riid==IID_IInternetSecurityManager)
{
METHOD_PROLOGUE(CDocHostSite,ServiceProvider)
HRESULThr=(HRESULT)pThis->ExternalQueryInterface(&riid,ppvObject);
returnhr;
}
elseif((guidService==SID_SDownloadManager)&&riid==IID_IDownloadManager)
{
CComObject<CDownLoadMgr>*pDownloadMgr=NULL;
HRESULThr=CComObject<CDownLoadMgr>::CreateInstance(&pDownloadMgr);
if((SUCCEEDED(hr))||(pDownloadMgr))
{
returnpDownloadMgr->QueryInterface(IID_IDownloadManager,ppvObject);
}
}
else
{
*ppvObject=NULL;

}
returnE_NOINTERFACE;
}

我的cDownloadmgr类:
.h文件
#pragmaonce
#include"downloadmgr.h"

classCDownLoadMgr:
publicCComObjectRootEx<CComSingleThreadModel>,
publicIDownloadManager
{
public:
CDownLoadMgr();
~CDownLoadMgr();

BEGIN_COM_MAP(CDownLoadMgr)
COM_INTERFACE_ENTRY(IDownloadManager)
END_COM_MAP()

//***IDownloadManager***
STDMETHODIMPDownload(IMoniker*pmk,IBindCtx*pbc,DWORDdwBindVerb,
LONGgrfBINDF,
BINDINFO*pBindInfo,
LPCOLESTRpszHeaders,
LPCOLESTRpszRedir,
UINTuiCP);
//Toinitializeclass

};

.cpp
#include"StdAfx.h"
#include"MyDownload.h"

CDownLoadMgr::CDownLoadMgr()
{
}

CDownLoadMgr::~CDownLoadMgr()
{
inti=0;
}

STDMETHODIMPCDownLoadMgr::Download(IMoniker*pmk,IBindCtx*pbc,DWORDdwBindVerb,
LONGgrfBINDF,BINDINFO*pBindInfo,
LPCOLESTRpszHeaders,LPCOLESTRpszRedir,UINTuiCP)
{
::MessageBox(NULL,_T("Download"),_T("DownloadManager"),MB_OK);
returnS_OK;
}

使用vs2008编译可以通过。点击下载连接的时候,在HRESULThr=CComObject<CDownLoadMgr>::CreateInstance(&pDownloadMgr);这步崩溃了。
看了下http://bbs.csdn.net/topics/380232604这个帖子,
按照他说的添加了两行代码,
CComObject<CDownLoadMgr>*pDownloadMgr=NULL;
CComModule_Module;
pAtlModule=&_Module;
HRESULThr=CComObject<CDownLoadMgr>::CreateInstance(&pDownloadMgr);
CreateInstance可以通过,但还没调到CDownLoadMgr::Download,又崩溃了。这次停在了
virtual~CComObject()throw()
{
m_dwRef=-(LONG_MAX/2);
FinalRelease();
#ifdef_ATL_DEBUG_INTERFACES
_AtlDebugInterfacesModule.DeleteNonAddRefThunk(_GetRawUnknown());
#endif
_pAtlModule->Unlock();
}
_pAtlModule->Unlock();这个地方。
我的这个实现有什么问题吗?

4 个解决方案

#1


根据你的程序,继承CAtlModuleT<T>的继承类。

比如AtlExeModule<T>

更多相关文章

  1. html2canvas 识别 svg 解决方案
  2. HTML5用户身份认证源代码:注册、登录、会话保持的解决方案
  3. 用于在表中强制换行的PHP或HTML/CSS解决方案
  4. 如何实现分布式文件上传解决方案?
  5. 一套PHP做app接口的解决方案
  6. curl获取网页内容出现乱码或为空的解决方案,另附curl_getinfo函数
  7. PHP XAMPP配置PHP环境和Apache80端口被占用解决方案
  8. mysql主从同步报slave_sql_running:no的解决方案
  9. win7下Django的MySql安装,问题解决方案

随机推荐

  1. PHP实现微信支付及退款流程的实例详解
  2. PHP session_register函数(附详解)
  3. 直击Thinkphp中的Swoole
  4. return关键字在php中的作用(含详解)
  5. 详解PHP死循环写法和作用
  6. use关键字在php中的使用(含代码)
  7. str_replace() 函数在php中的应用(附实例
  8. 详解php中的几种常见排序方法(附代码)
  9. PHP递归算法的应用(含示例)
  10. PHP实例计算经纬坐标间的距离