2009-11-11 2 views
0

ATL을 사용하여 작성한 ActiveX 컨트롤이 있는데 다소 심각하고 혼란스러운 문제가 있습니다. iDispatch :: Invoke가 DISPATCH_PROPERTYPUT/METHOD로 호출되면 모든 것이 정상입니다. 유효한 BSTR VT_BSTR 메서드 호출 후 IE 자바 스크립트 값을 반환하면 잘 작동합니다.IE에서 w/iDispatch 권한이 거부되었습니다. DISPATCH_PROPERTYGET

하지만 내가하려고하면

의 IDispatch는 DISPATCH_PROPERTYGET 플래그로 호출 호출, 나는 유효한 BSTR로 VT_BSTR 반환 값 (i는 메소드 호출에 사용하는 동일한 하나를 설정

var stringValue = Object.stringValue;

), IE에서 오류 상자가 거부되었습니다.

나는 IE의 자바 스크립트에 다양한 데이터 유형 (정수 (Long), 정수, bools, ... 등)을 반환하는 경우, 그것은합니다 (propertyGet() 메소드) 잘 작동합니다. VT_BSTR을 반환 할 때만 권한이 거부됩니다.

아이디어가 있으십니까?

+1

get 메소드 구현을 게시 할 수 있습니까? E_ACCESSDENIED를 반환하지 않는다고 가정합니다. –

+0

Howdy, \t \t \t \t pvarResult-> bstrVal = (BSTR) c; \t \t \t \tpvarResult-> vt = VT_BSTR; \t \t \t \t (wFlags == DISPATCH_PROPERTYGET) \t \t \t \t \t 복귀 S_OK 경우; 참고로 난 그냥 배치 wflags가 == 전에 몇 일 DISPATCH_PROPERTYGET 문을 확인 일들이 S_OK를 반환하고 만드는 경우. 이것은 나에게 상당히 혼란스러운 문제입니다. 나는 msdn에 idispatch 비트를 쏟아 부 었으며 내가 잘못하고있는 것을 나타낼만큼 많이 발견되지 않았습니다. bstr 디버깅도 유효합니다. 그리고 wflags에 dispatch_method가 설정된 경우 동일한 코드 블록이 작동합니다 .. – anthony

+0

죄송합니다. pvarResult-> bstrVal = (BSTR) c; pvarResult-> vt = VT_BSTR; 경우 (wFlags == DISPATCH_PROPERTYGET) 당신은 단지 좋은 포맷 방식으로 코드를 추가 게시물을 편집 할 수 있습니다 – anthony

답변

0

위의 의견에서 C를 BSTR로 전송 중입니다. C가 무엇입니까? 실제적으로 SysAllocString()을 호출하여 BSTR을 생성하지 않는다면 문제의 원인이 될 수 있습니다.

는이 과정에서 보좌관에 CComBSTR 또는의 CComVariant 사용을 고려하고, 또한 Eric's complete guide to BSTR semantics을 참조하십시오.

+0

나는 ... 코드의 해당 부분에 대한 과거에 SysAllocString을 시도하고,이 같은 허가를 거부 오류 다시 촬영했다 한 무엇 내가 또한 행운과의 CComVariant/CComBSTR을 시도했습니다 yish 두통. – anthony

+0

코드의 상당 부분을 게시 할 수 있습니까? 네가 거기에있는 것은 괜찮을 것이다. 그러나 네가 잘못하고있는 것 같아. 또한 IDL 정의를 포함하십시오. –

+0

내가 더 많은 것을 올려 놓을 수 있는지 보겠다.하지만 대부분은 모든 것이있다. idl 파일의 경우 다소 간단합니다. 반환하는 메소드가 idl ...에 정의되어 있지 않습니다. property_method와 함께 호출 된 메소드가 idl 파일에 정의되어 있지 않고 잘 작동합니다. (채우기 우리 자신의 getidsofnames는 정상적으로 작동하는 것 같습니다.) 나는 정말 이상한 것을 알고 있습니다. – anthony

관련 문제