Здравствуйте.
Есть проект ActiveX компонента реализованного на C++ (ATL). Работа с компонентом осуществляется из JavaScript.
Компонент содержит два класса Geometry и Shape. В классе Geometry есть метод getShape, который должен возвращать объект Shape, соответственно ожидается что после его вызова мы сможем считать свойства объекта из JavaScript.
В таком виде на первый взгляд все работает. Но после обращения к полю объекта, при обновлении страницы вылетает IE.
Подскажите как можно исправить данную ситуацию? Есть ли альтернативные способы передачи объекта в JavaScript?
Здравствуйте, WizardOZ, Вы писали:
WOZ>сам проект
WOZ>В таком виде на первый взгляд все работает. Но после обращения к полю объекта, при обновлении страницы вылетает IE. WOZ>Подскажите как можно исправить данную ситуацию? Есть ли альтернативные способы передачи объекта в JavaScript?
class ATL_NO_VTABLE CShape : ...
{
public:
BSTR desc;
...
никуда не годится, потому что нарушаются права владения строкой. desc должен владеть собственной копией, а не полученной от клиента через put_Description. Поэтому и код в CGeometry::getShape не верен.
Здравствуйте, Vi2, Вы писали:
Vi2>никуда не годится, потому что нарушаются права владения строкой. desc должен владеть собственной копией, а не полученной от клиента через put_Description. Поэтому и код в CGeometry::getShape не верен.
И это
pShapeClass->put_Description(SysAllocString(L"Описание для фигуры"));
заменить
pShapeClass->put_Description(L"Описание для фигуры");
Re[3]: Передача объекта в JScript из ActiveX (C++)
SS>pShapeClass->put_Description(SysAllocString(L"Описание для фигуры"));
SS>заменить
SS>pShapeClass->put_Description(L"Описание для фигуры");
Позволю не согласиться, потому что L"Описание для фигуры" != SysAllocString(L"Описание для фигуры"), но SysAllocString(L"Описание для фигуры") == CComBSTR(L"Описание для фигуры") без потери памяти.
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, SuhanovSergey, Вы писали:
SS>>И это Vi2>
SS>>pShapeClass->put_Description(SysAllocString(L"Описание для фигуры"));
Vi2>
SS>>заменить Vi2>
SS>>pShapeClass->put_Description(L"Описание для фигуры");
Vi2>
Vi2>Позволю не согласиться, потому что L"Описание для фигуры" != SysAllocString(L"Описание для фигуры"), но SysAllocString(L"Описание для фигуры") == CComBSTR(L"Описание для фигуры") без потери памяти.
Согласен.
Re[2]: Передача объекта в JScript из ActiveX (C++)
Vi2>никуда не годится, потому что нарушаются права владения строкой. desc должен владеть собственной копией, а не полученной от клиента через put_Description. Поэтому и код в CGeometry::getShape не верен.
Подскажите пожалуйста каким образом нужно объявить кокласс?. Просто с COM моделью познакомился недавно, и все это программирование на основе интерфейсом мне еще не до конца понятно. Можно ли как-то по другому передать объект в JavaScript? И если возможно, то хотя бы какой-нибудь небольшой пример для понимания процесса.
Re[3]: Передача объекта в JScript из ActiveX (C++)
Здравствуйте, WizardOZ, Вы писали:
WOZ>Подскажите пожалуйста каким образом нужно объявить кокласс?. Просто с COM моделью познакомился недавно, и все это программирование на основе интерфейсом мне еще не до конца понятно. Можно ли как-то по другому передать объект в JavaScript? И если возможно, то хотя бы какой-нибудь небольшой пример для понимания процесса.
Да вроде с коклассом у тебя всё в порядке (ну или относительно всё в порядке, поскольку идеал в коде не достижим). Проблема в реализации свойства. Вот приемлемый вариант (для BSTR desc:
Здравствуйте, Vi2, Вы писали:
Vi2>Здравствуйте, WizardOZ, Вы писали:
WOZ>>Подскажите пожалуйста каким образом нужно объявить кокласс?. Просто с COM моделью познакомился недавно, и все это программирование на основе интерфейсом мне еще не до конца понятно. Можно ли как-то по другому передать объект в JavaScript? И если возможно, то хотя бы какой-нибудь небольшой пример для понимания процесса.
Vi2>Да вроде с коклассом у тебя всё в порядке (ну или относительно всё в порядке, поскольку идеал в коде не достижим). Проблема в реализации свойства. Вот приемлемый вариант (для BSTR desc: Vi2>