1

C ++でXMLファイルを解析するために次のコードを使用しました。http://www.codeproject.com/Articles/176236/Parsing-an-XML-file-in-aCC-program .

ここで、ハッシュマップにデータを入力したいと思います。しかし、それを行うことはできません。エラーは、BSTR から std::string に変換できないことを示しています。

ここにコードの一部があります...

 MSXML2::IXMLDOMNode *pIParentNode = NULL;
 //Variables to store attribute's name,type and text:    
      BSTR bstrAttrName, bstrAttrType, bstrAttrText;

 typedef std::tr1::unordered_map< std::string, std::string > hashmap;     
      hashmap numbers;

      for(i = 0; i < (NodeListPtr->length); i++)
      {

            if (pIDOMNode) pIDOMNode->Release();            
            NodeListPtr->get_item(i, &pIDOMNode);


            if(pIDOMNode )
            {               

                pIDOMNode->get_nodeTypeString(&bstrNodeType);

                //We process only elements (nodes of "element" type): 
                BSTR temp = L"element";
               pIDOMNode->get_nodeTypeString(&bstrNodeType);

                //We process only elements (nodes of "element" type): 
                BSTR temp = L"element";

                if (lstrcmp((LPCTSTR)bstrNodeType, (LPCTSTR)temp)==0) 
                {


                    pIDOMNode->get_nodeName(&bstrItemNode);                 
                    printf("Node: %ls\n", bstrItemNode);        


                    pIDOMNode->get_text(&bstrItemText);
                    printf("Text: %ls\n", bstrItemText);

numbers[(std::string)bstrItemNode] = (std::string)bstrItemText; // Here error.. need string..

フォローしようとしましたが、1文字しか返されません。

numbers[(char*)bstrItemNode] = (char*)bstrItemText; // return only 1 character..need whole string..

このクラスから文字列にアクセスしてハッシュマップを埋める方法を教えてもらえますか??

エラーは次のとおりです。

error C2440: 'type cast' : cannot convert from 'BSTR' to 'std::string'
1>        No constructor could take the source type, or constructor overload resolution was ambiguous
1> : error C2440: 'type cast' : cannot convert from 'BSTR' to 'std::string'
1>        No constructor could take the source type, or constructor overload resolution was ambiguous

私を助けてください、私は立ち往生しています。任意の代替方法も感謝します。ありがとう...

4

1 に答える 1

0

BSTR から std::string にキャストすることはできません。変換する必要があります。

補足として、BSTR はワイド文字列をサポートしているため、std::wstring現在使用しているナロー文字列の代わりに使用することを検討することをお勧めします。また、ここで使用し_bstr_tている純粋なBSTRオブジェクトの代わりに使用することをお勧めします。_bstr_tメモリを管理し、変換を容易にします (変換に _bstr_t を使用する上記のリンクを参照してください)。変更可能な参照が必要かどうかに応じて、 メソッドGetAddressとメソッドを介して _bstr_t をメソッドに渡すことができます (例については、 _bstr_tのドキュメントを参照してください)。GetBSTR

于 2012-04-09T17:18:29.163 に答える