热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个自动化组件,定义了双接口为出接口,JavaScript和VBScript怎么跟它Advise来连接该组件?

有一个普通的自动化的组件(非ActiveX),实现了以下接口structIMath:publicIDispatch{virtualHRESULT__stdcallAd
有一个普通的自动化的组件(非ActiveX),实现了以下接口

struct IMath:public IDispatch
{
   virtual HRESULT __stdcall  Add(  ULONG a, ULONG b, ULONG* pret ) = 0;
   virtual HRESULT __stdcall  Sub(  ULONG a, ULONG b, ULONG* pret ) = 0;
};

    同时组件定义了一个双接口作为出接口如下

struct IMathEvent:public IDispatch
{
   virtual HRESULT __stdcall onTooLarge( ULONG r ) = 0;
};

    当IMath::Add或IMath::Sub方法的结果大于5时,组件就会通过客户端实现的IDispath接口来调用客户的onTooLarge函数.

    使用C++测试没有问题.但是在Javascript和Vbscript都不能正常响应该事件,跟到组件的代码里,发现是IMathEvent出接口的连接点没有被连接.
    C++中是使用Advise显示连接的事件连接点.但是在Javascript和Vbscript里,应该怎么样Advise呢?以下是我的脚本测试代码,请各位帮我看看有什么问题

/////Javascript的测试代码










//////Vbscript测试代码







    我在网上查了很多例子,它们的事件响应都是这么写的,为什么我这样写就不行呢?是不是普通的COM(非ActiveX)根本就不能使用脚本客户端的出接口呢?
    
    请大家帮忙看看啊

5 个解决方案

#1


  
这一句里的 "for 那个引号是我编辑文章时无意弄上去的,代码里本来没有.

#2


你的ocx在别的程序能用吗?例如vc

#3


估计你的组件没有实现IProvideClassInfo2接口,加上下面几行 (把CLSID, DIID, LIBID改为你的组件的数据)
        public IProvideClassInfo2Impl<&CLSID_Math,&DIID__IMathEvents, &LIBID_MATHEVENTLib>,

        COM_INTERFACE_ENTRY(IProvideClassInfo)
        COM_INTERFACE_ENTRY(IProvideClassInfo2)

#4


masterz,你说得完全正确哦.不过我不是用MFC写的,是COM API写的

#5


CathySun118,是可以用的.

推荐阅读
author-avatar
我很丑但我可以很温柔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有