IT.技术分享

vs2017开发ActiveX(主讲OCX)(十)、手动添加自定

2019-06-20  本文已影响0人  5de9e117f2fe

不知大家有没有发现,vs2017在通过类向导添加方法的时候,已经和以前的版本不一样了,我不知vs2017以前的版本是不是正常的,至少我的已经不正常了,刚开始以为不是最新的,我把vs版本更新至最新,还是不行,然后我有吧所有C++的安装包装了,仍然不行,我又两种猜测:一个是因为微软已经不推荐使用ActiveX插件了,所以逐步弱化,到以后的直接不支持,但我感觉这种可能性又不是太大,原因是,添加事件都是一切正常。那么还有一个原因就是vs2017的BUG,我估计这种可能性会大一些,因为个人觉得不是我们漏装了什么插件,毕竟事件都能够正常添加。花了我好多时间,依然没有新发现,如果有人知道了,麻烦告知我一声,谢谢。
下面我们对比一下vs2015和vs2017通过类向导添加方法界面的对比:
进入类向导方法都一样:如下


打开右键

vs2015的添加方法类向导界面:


新建方法名称
定义idl特性
vs2017的添加方法类向导界面:
添加方法
是不是差别特大。。。。。

既然vs2017不能通过类向导添加方法,而我们又需要使用(其实在我以前用vs2010的开发中,后面都是手动添加方法,基本不会用类向导添加,只是现在突然没了,强迫症就觉得总差点什么,哈哈!!!)那么,我们就只有通过手动来添加了。

[id(2), helpstring("method SetSource")] LONG SetSource(BSTR bstrInfo);
idl
dispidSetSource = 2L,
定义ID号
这里提一下,虽然dispidSetSource和eventidClickCus值都为2L,但不冲突的,一个是方法ID号,一个是事件ID号。
protected:
    LONG SetSource(LPCTSTR bstrInfo);
申明方法名
DISP_FUNCTION_ID(CCreateOcxDemoCtrl, "SetSource", dispidSetSource, SetSource, VT_I4, VTS_BSTR)
定义调度映射
LONG CCreateOcxDemoCtrl::SetSource(LPCTSTR bstrInfo)
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    ...............
    return 0;
}

编译注册即可,这里就不给测试的例子了,网上很多,可以通过JS测试,也可以新建C#项目测试,还可以通过MFC自带的ActiveX Control Test Container测试,这个工具vs2017没了,需要的可以去网上下载编译好的,或者vs2010里面的。不一一细说,教程很多。

上一篇下一篇

猜你喜欢

热点阅读