2011-07-11 11 views
1

IEで処理されるイベントを発生させるlongrunメソッドを持つHTMLページにActiveXコントロールを配置しました。IEがActiveXイベントをリッスンしないのはなぜですか?

m_vec.GetSize() == 0は、IEがActiveXに接続しないため、起動しません。

サイトはローカルホストで、信頼済みサイトにあり、セキュリティレベルは最小に設定されています。

Htmlの

<object id="myObj" name="myObj" ...>      
</object> 

    <script type="text/javascript" for="myObj" event="CallbackMethod(...)" language="javascript"> 
     alert("hello!"); 
    </script> 

IDL

[uuid(...), dual] 
interface _IBasicEvents : IDispatch 
{ 
    [id(1)] HRESULT CallbackMethod(...); 
}; 

[uuid(...)] 
coclass MyService 
{  
    [default] interface IBasicInterface;   
    [default, source] dispinterface _IBasicEvents; 
}; 

С++継承リスト:

class ATL_NO_VTABLE CMyService : 
    public CComObjectRootEx<CComSingleThreadModel>, 
    public CComControl<CMyService>, 
    public CComCoClass<CMyService, &CLSID_MyService>, 
    public IConnectionPointContainerImpl<CMyService>,  
    public IObjectWithSiteImpl<CMyService>,  
    public IPersistPropertyBagImpl<CMyService>, 
    public IObjectSafetyImpl<CMyService, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>, 
    public IOleInPlaceObjectWindowlessImpl<CMyService>, 
    public IOleObjectImpl<CMyService>, 
    public IDispatchImpl<IBasicInterface, ...>, 
    public CProxy_IScannerServiceEvents<CMyService> 

COM_MAP

COM_INTERFACE_ENTRY(IBasicInterface) 
COM_INTERFACE_ENTRY(IDispatch) 
COM_INTERFACE_ENTRY(IConnectionPointContainer) 
COM_INTERFACE_ENTRY(IObjectWithSite)  
COM_INTERFACE_ENTRY(IOleObject) 
COM_INTERFACE_ENTRY(IObjectSafety) 
COM_INTERFACE_ENTRY(IPersistPropertyBag)  

CONNECTION_POINT_MAP

CONNECTION_POINT_ENTRY(__uuidof(_IBasicEvents)) 

CATEGORY_MAP

IMPLEMENTED_CATEGORY(CATID_SafeForScripting) 
IMPLEMENTED_CATEGORY(CATID_SafeForInitializing) 

はここに何が間違っているのですか? IEが接続ポイントインターフェイスに接続しない理由

一時的な解決策

私は<script for event>でゲームを放棄し、メソッドのパラメータとしてjavascriptのコールバック関数を渡すために開始(タイプIDispatch*

+0

event = "CallbackMethod"であってはなりませんか? – EricLaw

+0

私は試しました - それは助けにはなりません:( –

答えて

0

[UUID(...)、デュアル] インターフェース _IBasicEvents:IDispatch

[default、source] dispinterface _IBasicEvents;

AFAIK IDLコクラスは上記のようにイベントインターフェイスを参照する必要がありますが、_IBasicEventsはdispainterfaceとして定義されていません。代わりに、それは正しいインターフェースではありません。存在するはずです:

[...] dispinterface _IBasicEvents {methods:...};

関連する問題