2009-11-11 3 views
0

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

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

var stringValue = Object.stringValue;

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

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

Любые идеи?

+1

Можете ли вы опубликовать свой метод получения метода? Я предполагаю, что вы не возвращаете E_ACCESSDENIED. –

+0

Howdy, \t \t \t \t pvarResult-> bstrVal = (BSTR) c; \t \t \t \t pvarResult-> vt = VT_BSTR; \t \t \t \t, если (wFlags == DISPATCH_PROPERTYGET) \t \t \t \t \t возврата S_OK; как примечание Я только что разместил заявление if wflags == DISPATCH_PROPERTYGET за несколько дней назад, чтобы убедиться, что все возвращается S_OK. это смешно проблема для меня .. я вылил биты idispatch на msdn и не нашел много, чтобы указать, что я делаю неправильно. также при отладке bstr действителен .. и тот же блок кода работает, когда dispatch_method установлен в wflags .. – anthony

+0

Извините, что с этим связано. pvarResult-> bstrVal = (BSTR) c; pvarResult-> vt = VT_BSTR; if (wFlags == DISPATCH_PROPERTYGET) return S_OK – anthony

ответ

0

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

Рассмотрите возможность использования CComBSTR или CComVARIANT, чтобы помочь вам в этом процессе, а также, пожалуйста, прочтите Eric's complete guide to BSTR semantics.

+0

Я попытался SysAllocString в прошлом для той части кода, и дал ему еще раз выстрелил с тем же разрешение отказано ошибка ... , что головная боль yish я также пытался CComVariant/CComBSTR не повезло. – anthony

+0

Можете ли вы разместить большую часть своего кода? То, что у вас там, должно быть хорошо, но похоже, что вы, возможно, ошибаетесь. Также укажите определение IDL. –

+0

Я посмотрю, смогу ли я что-нибудь добавить, но по большей части это все, что есть ... Что касается IDL-файла, то довольно простые методы, которые я возвращаю, не определены в idl .. методы, вызванные с помощью свойства_method, также не определены в файле idl и работают нормально .. (заполнение getidsofnames на наш взгляд, кажется, работает нормально) , возможно, что-то действительно странное. Мне не хватает и нужно продолжать заниматься. – anthony