В IE отказано в разрешении с помощью iDispatch DISPATCH_PROPERTYGET - PullRequest
0 голосов
/ 11 ноября 2009

У меня есть элемент управления ActiveX, который я написал с использованием ATL, и столкнулся с довольно серьезной и запутанной проблемой. Когда iDispatch :: Invoke вызывается с DISPATCH_PROPERTYPUT / METHOD, все в порядке. Когда я возвращаю значение в javascript IE, после вызова метода VT_BSTR с допустимым BSTR все работает нормально.

Но когда я пытаюсь:

var stringValue = Object.stringValue;

, который вызывает iDispatch, вызванный с флагом DISPATCH_PROPERTYGET, и я устанавливаю возвращаемое значение VT_BSTR с действительным BSTR (точно такое же, которое я использую с вызовами метода), я получаю окно ошибки отказа в разрешении в IE.

Когда я возвращаю различные другие типы данных (longs, integer, bools и т. Д.) В JavaScript, он работает нормально (с помощью метода propertyGet ()). Я получаю отказано в разрешении только при возврате VT_BSTR.

Есть идеи?

1 Ответ

0 голосов
/ 16 ноября 2009

В вашем комментарии выше вы приводите c к BSTR. Что такое с? Если вы на самом деле не вызываете SysAllocString () для создания BSTR, это вполне может быть источником вашей проблемы.

Рассмотрите возможность использования CComBSTR или CComVARIANT, чтобы помочь вам в этом процессе, а также прочитайте Полное руководство Эрика по семантике BSTR .

...