gpt4 book ai didi

c++ - 为什么 IE 不监听 ActiveX 事件?

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:09 25 4
gpt4 key购买 nike

我使用 longrun 方法将 ActiveX 控件放到 HTML 页面上,该方法应该触发要由 IE 处理的事件。

他们不开火是因为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*)

最佳答案

[uuid(...), dual] interface _IBasicEvents : IDispatch

[default, source] dispinterface _IBasicEvents;

AFAIK IDL coclass 应该引用事件接口(interface),就像你在上面所做的那样,但是你的 _IBasicEvents 没有定义为 dispainterface。相反,它是一个真实的界面,这是不正确的。应该有:

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

关于c++ - 为什么 IE 不监听 ActiveX 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com