2009-11-11 4 views
0

J'ai un contrôle ActiveX que j'ai écrit en utilisant ATL, et je rencontre un problème assez sérieux et confus. Lorsque iDispatch :: Invoke est appelé avec DISPATCH_PROPERTYPUT/METHOD tout va bien. Lorsque je renvoie une valeur à IE javascript, après un appel de méthode d'un VT_BSTR avec un BSTR valide, cela fonctionne très bien.Autorisation refusée dans IE w/iDispatch DISPATCH_PROPERTYGET

Mais lorsque je tente:

var stringValue = Object.stringValue;

qui appelle IDispatch invoqué avec le drapeau de DISPATCH_PROPERTYGET, et je mis la valeur de retour à VT_BSTR avec un BSTR valide (exactement le même que j'utilise avec les appels de méthode), J'obtiens une boîte d'erreur d'autorisation refusée dans IE.

Lorsque je renvoie divers autres types de données (longs, entiers, booléens, ... etc) au javascript IE, cela fonctionne très bien (avec la méthode propertyGet()). Je reçois seulement la permission refusée en retournant VT_BSTR.

Des idées?

+1

Je suppose que vous ne retournez pas E_ACCESSDENIED. –

+0

allo, \t \t \t \t pvarResult-> bstrVal = (BSTR) c; \t \t \t \t pvarResult-> vt = VT_BSTR; \t \t \t \t if (wFlags == DISPATCH_PROPERTYGET) \t \t \t \t \t S_OK de retour; comme note Je viens de placer l'instruction if wflags == DISPATCH_PROPERTYGET il y a quelques jours pour m'assurer que les choses retournaient S_OK. Ceci est un problème confus pour moi .. J'ai versé sur les bits idispatch sur msdn et pas trouvé beaucoup pour indiquer ce que je fais mal. également sur le débogage de la bstr est valide .. et le même bloc de code fonctionne lorsque dispatch_method est défini dans wflags .. – anthony

+0

Désolé pour la mise en forme avec cela. pvarResult-> bstrVal = (BSTR) c; pvarResult-> vt = VT_BSTR; if (wFlags == DISPATCH_PROPERTYGET) return S_OK – anthony

Répondre

0

Dans votre commentaire ci-dessus, vous lancez c vers un BSTR. Qu'est-ce que c? Si vous n'appelez pas réellement le SysAllocString() pour créer le BSTR, cela pourrait très bien être la source de votre problème. Envisagez d'utiliser CComBSTR ou CComVARIANT pour vous aider dans le processus, et également s'il vous plaît lire Eric's complete guide to BSTR semantics. Pouvez-vous poster votre implémentation de la méthode Get?

+0

J'ai essayé SysAllocString dans le passé pour cette partie du code, et lui a donné a tiré à nouveau avec la même erreur refusé la permission ... ce un mal de tête Yish J'ai aussi essayé CComVariant/CComBSTR sans chance. – anthony

+0

Pouvez-vous poster une plus grande partie de votre code? Ce que vous avez là devrait bien se passer, mais il semble que vous le fassiez peut-être mal. Incluez également votre définition IDL. –

+0

Je vais voir si je peux mettre quelque chose de plus, mais pour la plupart c'est tout ce qu'il y a ... comme pour le fichier IDL c'est plutôt simple les méthodes que je retourne ne sont pas définies dans l'idl .. les méthodes appelées avec property_method ne sont pas non plus définies dans le fichier idl et fonctionnent bien .. (remplir getidsofnames sur notre propre semble fonctionner correctement) il y a probablement quelque chose de vraiment étrange que je manque et que j'ai besoin de continuer à jouer avec. – anthony

Questions connexes