1444       Конференция C SoobCha           письмо # 1445 1446  


Тема: Re: _bstr_t В CString !!!
Дата: Sat, 14 Jun 2008 12:25:23 +0700
Кому: "C" <C@soobcha.org>
X-Mailer: The Bat! (v4.0.20) Professional
Content-Type: text/plain; charset=koi8-r
От Кого: "Alexey N. Vinogradov" <a_n_vinogradov@mail.ru>

     Здравствуйте, Лагоша.

Вы писали 13.06.2008, в 17:42 в письме <mid:list-9415831@nvptus.ru>
  из почтовой программы: The Bat! (v3.60.07) Professional

ЛВГ> Как же победить ? В чем отличие BSTR от _bstr_t ???
ЛВГ> Как все таки засунуть в CString ?

_bstr_t - это "обёртка" над BSTR. Просто "откастить" _bstr_t в BSTR не
совсем верно. Для этого у него есть особые методы (см. comutil.h)

    // Get the physical BSTR
    //
    BSTR& GetBSTR() ;
    BSTR* GetAddress() ;

Потому я бы сделал вместо

w1 = (BSTR)pChild->nodeName;
w2 = (BSTR)pChild->text;
        
вот так:

w1 = pChild->nodeName.GetBSTR();
w2 = pChild->text.GetBSTR();


зы: "прямой" каст (типа w1 = (BSTR)что-то) лучше вообще не
использовать, а писать вместо этого reinterpret_cast<BSTR>(что-то). В
этом случае компилятор сразу выкинет варнинг по поводу не совсем
корректного преобразования типа. В данном случае - внутри _bstr_t
первым членом хранится указатель на экземпляр внутреннего класса, у
которого, в свою очередь, первым членом находится BSTR. Т.е. если
хочется совсем "по-хакерски", то нужно _bstr_t кастить в BSTR*
(напрямую), а не в BSTR. Но это чисто умозрительно. Если бы я увидел
подобное в реальном коде, я бы дал по шее программисту, который так
написал.

зыы: MSDN в помощь!


--
С уважением, Alexey N. Vinogradov (mailto:klirik@narod.ru) http://klirik.narod.ru
За последние сутки получено ( байт) "хамов" и ( байт) "спамов".


  1444 1446  
 
???Mail.ru ??? ?????
╘ 2000-2006 Сообщество Чайников