IE调用一个atl activex,但是不能够接收activex返回的事件!????

andyLe 2004-10-21 08:19:20
我写了一个activeX控件,在IE中通过<Object>语法调用,控件中的方法可以顺利调用,但是就是接收不到它的事件。
调用方法如下:
<SCRIPT LANGUAGE=javascript FOR=CWStarup EVENT="OnComplete()" id=1>
<!--
window.alert("成功");
//-->
</SCRIPT>

后来,我跟踪控件代码,发现Fire_OnComplete(与OnComplete匹配)方法执行的时候,nConnections 为0,也就是说控件没有把IE当作她的一个客户端、调用者。。。这样,事件自然之形不成功,可是为什么呢????怎样解决???
...全文
427 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
andyLe 2004-11-12
  • 打赏
  • 举报
回复
确实执行到fire,但是连接数为0,自然无法发送事件。
我在delphi中调用成功,IE不可以,其实我就是想要知道html中怎么调用这个控件和怎么响应事件。

请教了:leyi.163@163.com
andyLe 2004-11-12
  • 打赏
  • 举报
回复
那么,再说一句,就是delphi安装这个控件后,是可以调用该事件(没有添加 IProvideClassInfo2Impl 编译的版本)。我想,应该是delphi他自己添加了eventiid的缘故。
andyLe 2004-11-12
  • 打赏
  • 举报
回复
晕倒!
自2004-10-22后,忙别的事情,今天刚来,没有仔细看各位的答复。
还有我对IProvideClassInfo2Impl的认识不是很清楚,也忽略了它的重要性。

谢谢 erehw(疯狂CS) 的及时提醒,谢谢 kenvy(陈胜), icelight(给我一个接口,我能驱动地球……………仪) ,谢谢各位了,可以给分了,哈。

其实潘爱民的一篇文章已经说过:

增加对IProvideClassInfo2接口的支持:
需要typelib的支持
加入基类IProvideClassInfo2Impl
在COM MAP中加入:
COM_INTERFACE_ENTRY(IProvideClassInfo2)
COM_INTERFACE_ENTRY(IProvideClassInfo)
erehw 2004-11-12
  • 打赏
  • 举报
回复
楼主:你的能力比回答你问题的一些人可能更强。
此外,回复人: kenvy(陈胜) ( ) 信誉:
已经给出正确答案。
--------------------
半个月前看到这个问题---当时就看到了正确答案。实在很遗憾。
天限天空 2004-10-30
  • 打赏
  • 举报
回复
http://blog.csdn.net/newkey007/archive/2004/08/10/70154.aspx

自己加载ie调试一下,到底是否到了 fire处
到了,看看里面的 ar ...
完全可以跟踪出来的, 多跟几步就确定了

etre 2004-10-26
  • 打赏
  • 举报
回复
我没有象你那样做的,我做的是在调用成功后,直接调用html的javascript.是完全可以成功的.我这里有例子.要就email吧
hbxuchanghai 2004-10-26
  • 打赏
  • 举报
回复
最近我一直在找这样的东西,呵呵...先做个记号,要向你们学习,呵呵...
伪高手 2004-10-25
  • 打赏
  • 举报
回复
就是没有加 IProvideClassInfo2Impl 的问题,我一个月前也碰到这个问题了
  • 打赏
  • 举报
回复
同意 icelight(给我一个接口,我能驱动地球……………仪) ,大概就是这个问题了.
蒋晟 2004-10-22
  • 打赏
  • 举报
回复
原因1 你可能在控件的驻在线程之外触发了事件
原因2 事件的参数使用了校本不支持的数据类型
icelight 2004-10-22
  • 打赏
  • 举报
回复
若在工作者线程中FIRE_ON,需要打微软的一个补丁类IConnectionPointImplMT。


有没有继承IProvideClassInfo2Impl?
BEGIN_CONNECTION_POINT_MAP中有没有映射事件ID?
andyLe 2004-10-22
  • 打赏
  • 举报
回复
调试调用网页!!!

<html>

<head>
<SCRIPT LANGUAGE=jscript FOR=Andy EVENT="complete()" id=1>
<!--
window.alert("成功");
//-->
</SCRIPT>
</head>
<TITLE>
ChatWindow
</TITLE>
<BODY >
<OBJECT id=Andy
classid="clsid:0DD78484-BFCF-4C2C-880E-8659F73A164C"
codebase="debug\AtlCtrl3.dll"
width=500
height=255
align=center
hspace=0
vspace=0 >


</OBJECT>

<SCRIPT ID=clientEventHandlersJS LANGUAGE=javascript>
<!--

Andy.Start();

//-->
</SCRIPT>
andyLe 2004-10-22
  • 打赏
  • 举报
回复
提供Email,我发给大家看看。。。
andyLe 2004-10-22
  • 打赏
  • 举报
回复
事件ID是有的。。。。。
BEGIN_CONNECTION_POINT_MAP(CStartupCtrl)
CONNECTION_POINT_ENTRY(DIID__IStartupCtrlEvents)
END_CONNECTION_POINT_MAP()

Fire_On...方法也执行到了,就是连接点总数为0了,导致始终找不到对象发出去了。

我怀疑是IE调用的时候有什么设置吗?
warmchang 2004-10-21
  • 打赏
  • 举报
回复
不会呀,是不是事件部分写得有问题;
andyLe 2004-10-21
  • 打赏
  • 举报
回复
自己顶先,在线等呢!

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧