自己写的ActiveX控件,仅在IE中无法触发自定义事件,求助!

时间:2021-09-13 09:06:57
用BCB6.0写了个ActiveX控件(通过VCL控件转),ActiveX控件在BCB的From中测试全部通过,但是在IE中除了TNotify声明的事件外都无法激活。利用调试日志,发现实际上VCL中的事件点燃函数已经运行,而且函数指针不为空。但是IE中的javascript事件代码无响应!
在网上搜索此类问题,确实也有其他人问,但没有找到答案。

各位高手是否遇到过?


VCL控件的代码如下:
事件声明:
typedef void __fastcall (__closure *TOnIEReceiveData)(System::TObject* Sender, WideString Data);

TOnIEReceiveData FOnReceiveData;

__property TOnIEReceiveData OnReceiveData = { read = FOnReceiveData, write = FOnReceiveData};

事件点燃函数:
void __fastcall THollyCommunicateClient::DoOnReceiveData(IECommMessage Message)
{
    CHECKPOINT;//调试日志
    if(FOnReceiveData)
    {
        FOnReceiveData(this, WideString(Message.Body));
        WriteLine("[检查点]\t[IE Comm]\t[检查点]\t Invoke FOnReceiveData()");//调试日志,这句日志被激活了
    }
    else
        WriteLine("[检查点]\t[IE Comm]\t[检查点]\t FOnReceiveData函数指针为空");;//调试日志

10 个解决方案

#1


留下email,俺给你发

#2


需手工写点火代码,以事件GetMessage为例
void __fastcall TseatImpl::OnGetMessageEvent(TObject *Sender)
{
  Fire_OnGetMessage();
};

在需要触发事件时调用就行了
OnGetMessage(this);

#3


matq2008(叶子.net) ,你好:
我的邮箱:delphi@yuan.com.cn

我有点燃事件啊!DoOnReceiveData()就是,它里面已经触发了事件指针。
还是,你的意思要针对OCX控件做二次点燃?为什么呢?

#4


大家一定要帮忙啊

#5


大家一定要帮忙啊

#6


关于VCL中的事件点燃函数,
没接触过。

关注。。

#7


up

#8


up

#9


up

#10


IE内置的脚本引擎Jscript和VBScript仅支持变体类型,其它数据类型,包括字符串都不被支持。更改你的事件参数类型看看。

#1


留下email,俺给你发

#2


需手工写点火代码,以事件GetMessage为例
void __fastcall TseatImpl::OnGetMessageEvent(TObject *Sender)
{
  Fire_OnGetMessage();
};

在需要触发事件时调用就行了
OnGetMessage(this);

#3


matq2008(叶子.net) ,你好:
我的邮箱:delphi@yuan.com.cn

我有点燃事件啊!DoOnReceiveData()就是,它里面已经触发了事件指针。
还是,你的意思要针对OCX控件做二次点燃?为什么呢?

#4


大家一定要帮忙啊

#5


大家一定要帮忙啊

#6


关于VCL中的事件点燃函数,
没接触过。

关注。。

#7


up

#8


up

#9


up

#10


IE内置的脚本引擎Jscript和VBScript仅支持变体类型,其它数据类型,包括字符串都不被支持。更改你的事件参数类型看看。