2012-05-03 8 views
0

CDHtmlDialogで行とセルを作成したい。ここに私が書いたコードされていますMFC: "IHTMLTable :: insertRow"を実行すると "アクセス違反"が発生する

void CHtmlTableTestDlg::OnDocumentComplete(LPDISPATCH pDisp, LPCTSTR szUrl) 
{ 
    IHTMLTable* table; 
    this->GetElement(_T("Table"),(IHTMLElement**)&table); 
    IDispatch* dispatch; 
    table->insertRow(1,&dispatch); 
} 

をここでは、テーブルのhtmlです:

<table id="Table"> 
    <tr> 
     <th>Column</th> 
    </tr> 
</table> 

私はプロジェクトをデバッグして実行「卓上>にinsertRow(1、&派遣以下のエラーを得ました) "

HtmlTableTest.exeで0x3fa53780で処理されない例外が発生しました。0xC0000005:0x00000001にアクセス違反が書き込まれました。

私は私のテストプロジェクトアップロードした: http://top720.com/Temp/HtmlTableTest.zip

CDHtmlDialog上の行とセルベースを作成する方法を?

ご協力いただきありがとうございます。

+0

テーブルが有効なポインタであることを確認しましたか? – PhilMY

+0

私はC++の初心者です。ポインタをチェックする方法は有効ですか?私はチェックして渡すために "if"を使います。 'code' if(table)this-> MessageBox(L"テーブルが有効なポインタです! "); –

答えて

0

IHTMLElementIHTMLTableの間でキャストすることはできません。これを試してください:

IHTMLElement* element; 
if(S_OK == this->GetElement(_T("Table"),(IHTMLElement**)&element)) { 
    IHTMLTable* table; 
    if(S_OK == element->QueryInterface(&table)) { 
     IDispatch* dispatch; 
     table->insertRow(1,&dispatch); 
     table->Release(); 
     table = NULL; 
    } 
} 

また、introduction to COMを読む価値があります。

+0

私はC#プロジェクトでIHtmlElementオブジェクトをIHtmlTableオブジェクトの成功に変換しなければならなかったので、htmlオブジェクトはC++プロジェクトと同じ方法で変換できると考えました。 –

関連する問題