为何总是提示非法存取?
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s;
s="d:\\book.htm";
TCppWebBrowser *CppWebBrowser1=new TCppWebBrowser(Form1);
(dynamic_cast<TControl*>(CppWebBrowser1))->Parent=Form1;
CppWebBrowser1->Navigate(s);
CppWebBrowser1->OnDocumentComplete=Form1->CppWebBrowser1DocumentComplete;
}
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
IHTMLDocument2 *document;
BSTR title;
(void *)document=CppWebBrowser1->Document;
document->get_title(&title);
Edit1->Text=title;
}
出现错误提示:Access violation at address 400D1388 in module "VCL50.BPL".Read of address 00000208.
如何解决??请大家帮忙。谢谢!!!
问题点数:100、回复次数:11Top
1 楼jxlee365(老牛自知黄昏晚,不待扬鞭自奋蹄)回复于 2002-06-26 11:41:53 得分 10
CppWebBrowser1->OnDocumentComplete=Form1->CppWebBrowser1DocumentComplete;这句去掉,
选定CppWebBrowser1后,直接从OBJECT INSPECTOR
关联OnDocumentComplete事件。Top
2 楼jishiping(JSP 季世平)回复于 2002-06-26 12:03:53 得分 10
在同一个class里,为什么有那么多的人不用this, 而是喜欢用Form1
这样的外部变量名呢?要知道这样用,可能是有问题的(就要看你在
在其它地方怎么写了),用this不好吗,还是不知道用this。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s = "d:\\book.htm";
TCppWebBrowser *CppWebBrowser1=new TCppWebBrowser(this);
CppWebBrowser1->Parent=this;
CppWebBrowser1->Navigate(s);
CppWebBrowser1->OnDocumentComplete=CppWebBrowser1DocumentComplete;
}Top
3 楼jxlee365(老牛自知黄昏晚,不待扬鞭自奋蹄)回复于 2002-06-26 17:11:49 得分 0
你先不要动态生成控件,
设计时就把它拖到FORM上去。
非法访问很可能与这段的上下文有关。Top
4 楼ddeng(登登)回复于 2002-06-26 17:50:57 得分 50
没有问题啊
void __fastcall TForm1::Button1Click(TObject *Sender)
{
WideString s = L"http://www.csdn.net";
TCppWebBrowser *CppWebBrowser1=new TCppWebBrowser(this);
CppWebBrowser1->Align = alClient;
CppWebBrowser1->Parent=this;
CppWebBrowser1->OnDocumentComplete = CppWebBrowser1DocumentComplete;
CppWebBrowser1->Navigate(s);
}
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
{
TCppWebBrowser *cb = dynamic_cast<TCppWebBrowser *>(Sender);
if(cb==NULL) {
return;
}
IHTMLDocument2 *document;
BSTR title;
(void *)document=cb->Document;
document->get_title(&title);
Edit1->Text=title;
}
Top
5 楼RedProgramer(TST : RedSteel)回复于 2002-06-26 21:05:06 得分 0
jishiping说的很有道理,因为动态生成的窗体很可能不叫Form1,这时你的赋值就有可能出问题,因为Form1指向空地址Top
6 楼yeqiufeng(叶秋枫)回复于 2002-06-26 22:33:56 得分 0
我来晚了
请问问题是否解决了
我打个标记先
@_@Top
7 楼Lo(BlackJack)回复于 2002-06-27 01:24:20 得分 0
搞定了吗?Top
8 楼qqfqqf(qqjqqj)回复于 2002-06-28 00:58:12 得分 0
还没有呢Top
9 楼Lo(BlackJack)回复于 2002-06-28 01:21:40 得分 0
在我的机子上编译完全正常呀!
你用单步执行看看,是错在哪一句了?Top
10 楼naughtyboy(重归起跑线)回复于 2002-06-28 02:13:09 得分 30
void __fastcall TForm1::CppWebBrowser1DocumentComplete(TObject *Sender,
LPDISPATCH pDisp, TVariant *URL)
这是不是你自己定义的过程??
如果是那就不能用下面这句命令
(void *)document=CppWebBrowser1->Document;
因为CppWebBrowser1是你动态创建的
你不能自己编写的DocumentComplete里面直接用CppWebBrowser1
Top
11 楼lingyunfeipu(凌云)回复于 2002-06-28 09:03:16 得分 0
我也遇到过Top




