От:
Denwer
Дата: 24.06.03 13:13
Оценка:
Ну начну с примера
IHTMLDocument2* pDocument;
.........
CComBSTR bsTable = L"TABLE" ;
BSTR bsTable1 = L"TABLE" ;
CComQIPtr<IHTMLElement> pElementTable;
pDocument->createElement(bsTable, &pElementTable); //Так работает
pDocument->createElement(bsTable1, &pElementTable); //а так НЕТ
Вопрос почему такое?
ЗЫ: вот объявление этой функции
virtual HRESULT STDMETHODCALLTYPE createElement ( BSTR eTag, IHTMLElement **newElem) = 0
Здравствуйте, Denwer, Вы писали:
IHTMLDocument2* pDocument;
.........
CComBSTR bsTable = L"TABLE" ;
BSTR bsTable1 = ::SysAllocString(L"TABLE" ); // !!!
CComQIPtr<IHTMLElement> pElementTable;
pDocument->createElement(bsTable, &pElementTable); //Так работает
pElementTable = 0; // !!! (иначе потеряешь первый объект или будет AddRef без Release)
pDocument->createElement(bsTable1, &pElementTable); //а теперь????
Невозможное мы сделаем сегодня — чудо займет немного больше времени. /Аноним/
Здравствуйте, Denwer, Вы писали:
D>BSTR bsTable1 = L"TABLE";
Потому что L"TABLE" не является корректной BSTR-строкой.
а что значит не работает?
а что значит не работает?
... << RSDN@Home 1.0 beta 6a >>
UA>Здравствуйте, Denwer, Вы писали:
И, на всякий пожарный:
BSTR bsTable1 = ::SysAllocString(L"TABLE" ); // !!!
//....
//И не забываем вызвать !
::SysFreeString(bsTable1);
Лучше использовать
CComBSTR - меньше головной боли и больше надежности.
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: L"TABLE" - это не BSTR
Здравствуйте, Denwer, Вы писали:
D>BSTR bsTable1 = L"TABLE";
Ошибка здесь. L"TABLE" — это не BSTR, а LPWSTR. А дальше — из этого все и вытекает.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
коченчно же SysAllocString надо вызывать как предыдущие ораторы говорили
... << RSDN@Home 1.0 beta 6a >>
От:
Denwer
Дата: 24.06.03 13:32
Оценка:
Здравствуйте, UnrealAlex, Вы писали:
UA>Здравствуйте, Denwer, Вы писали:
UA>UA>IHTMLDocument2* pDocument;
UA>.........
UA>CComBSTR bsTable = L"TABLE" ;
UA>BSTR bsTable1 = ::SysAllocString(L"TABLE" ); // !!!
UA>CComQIPtr<IHTMLElement> pElementTable;
UA>pDocument->createElement(bsTable, &pElementTable); //Так работает
UA>pElementTable = 0; // !!! (иначе потеряешь первый объект или будет AddRef без Release)
UA>pDocument->createElement(bsTable1, &pElementTable); //а теперь????
UA>
Ну ясен перец что я эти две функции вместе не вызываю, либо вариант 1 либо вариант 2.
Даже если бы и потерялась ссылка, это было бы все го то мемори ликс, а в моем случае это не создание объекта.
Это я понял что собака порылась в ::SysAllocString(L"TABLE"); Хотелось бы объяснения получить, если можно.
Заранее спасибо.
Здравствуйте, Denwer, Вы писали:
D>Это я понял что собака порылась в ::SysAllocString(L"TABLE"); Хотелось бы объяснения получить, если можно.
BSTR строка для in паратетра должна предворятся 4-байтами, с указанием длины. L"TABLE" — этого не делает в отличие от SysAllocString
Здравствуйте, Denwer, Вы писали:
D>Это я понял что собака порылась в ::SysAllocString(L"TABLE"); Хотелось бы объяснения получить, если можно.
То, что ты передаешь в место BSTR, не будет корректно маршалиться.
GS
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить