紧急求救!!!!!紧急求救!!!!!300分求解!

Tasehouny 四川大学 2002-09-05 11:03:15
MSDN 上说过Loading HTML content from a Stream ,参见:
http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/hosting/wbcustomization.asp

但如果我的页面中包含了多个帧,那么怎样才能获得正确的IPersistStreamInit Interface 呢??

CComPtr<IHTMLFramesCollection2> pFrameCol ;
hr = m_pMainDoc->get_frames(&pFrameCol);
ASSERT(pFrameCol != NULL);
_variant_t vIndex("MainFrame");
_variant_t vDispatch;
hr = pFrameCol->item(&vIndex,&vDispatch);
ASSERT(SUCCEEDED(hr));
CComPtr<IHTMLWindow2> pIWin2;
hr = vDispatch.pdispVal->QueryInterface(IID_IHTMLWindow2, (void**)&pIWin2);
ASSERT(pIWin2 != NULL);

#ifdef _DEBUG
BSTR bsName;
hr = pIWin2->get_name(&bsName);
ASSERT(SUCCEEDED(hr));

CString strName(bsName);
ASSERT(strName == "MainFrame");
#endif
hr = pIWin2->get_document(&m_pMainFrameDoc);
ASSERT(SUCCEEDED(hr));

CComQIPtr<IPersistStreamInit>pPSI(m_pMainFrameDoc);


HRESULT hr = pPSI->InitNew(); //这里返回错误代码E_NOTIMPL


如果说从 m_pMainDoc 查询到的IPersistStreamInit接口,调用InitNew()方法肯定是成功的! 如此说来,如果是帧,则不能用Loading HTML content from a Stream 方法更新页面了?

用write可以,但如果页面复杂或者大一点,就会出现堆分配错误!如何解决呢????
...全文
11 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dimcat 2002-09-06
爱莫能助
回复
txdxun 2002-09-06
learning
回复
puyinghua 2002-09-06
?
回复
why?
回复
tomcat_jb 2002-09-06
哈哈,我来收:)

我也在做HTML的东西,好麻烦,不注意就过不去了:(
回复
Tasehouny 2002-09-06
问题解决了,是sfArray在作怪!


第一个进来的同事,赠送100分!
回复
Tasehouny 2002-09-06
求救!
如果用IHTMDocument2的write方法是可以写入的,但是,如果HTML代码过于复杂或者代码大于60K以上,就会出现RtlSzieHeap的错误,这种错误通常是在删除一个不存在的指针时出现的,例如:GlobalFree(ptr),但这是IE内部实现的,我怎么管呢?

下边贴出我的函数代码,大家看看有没有错?而且这个错误,在不同的IE版本上表现是不同的,有的版本是不出错,有的就出错!

例如,我在HTML代码中多写一些注释性的代码,就引发了这样的错误!<!-- HTML 注释 --> 真不知是为什么????

HRESULT CHtmlTemplate::WriteHtml2Doc(IHTMLDocument2 *pDoc,CString *pstrHtml)
{
HRESULT hresult = S_OK;
VARIANT *param;
SAFEARRAY *sfArray;
BSTR bstr;

//Creates a new one-dimensional array
sfArray = SafeArrayCreateVector(VT_VARIANT, 0, 1);

if (sfArray != NULL && pDoc != NULL)
{

bstr = pstrHtml->AllocSysString();
hresult = SafeArrayAccessData(sfArray,(LPVOID*) & param);
param->vt = VT_BSTR;
param->bstrVal = bstr;
hresult = SafeArrayUnaccessData(sfArray);
hresult = pDoc->write(sfArray);
pDoc->close();
SysFreeString(bstr);

}
else
{
hresult = S_FALSE;
}

if (sfArray != NULL)
{
SafeArrayDestroy(sfArray);
}
return hresult;
}
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2002-09-05 11:03
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……