VS2017创建MFC ActiveX工程制作IE OCX插件

本文详细介绍了在VS2017环境下使用MFCActiveX开发OCX插件的过程,包括创建工程、编写示例代码使JS能够调用OCX函数,并在IE浏览器中实现函数调用。通过具体实例,展示了如何添加方法、实现调度映射及IDL文件配置,最终实现了JS与OCX插件的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看了一个采用MFC ActiveX封装DLL的OCX项目的源码,现将学习到的内容记录下来。本次的学习记录计划写如下几个主题:
1.VS2017创建MFC ActiveX工程制作IE OCX插件
2.VS2017中MFC ActiveX工程如何调试
3.在IE中使用JS调用第三方DLL函数
4.通过cab包由IE自动注册ActiveX
5.ActiveX数字签名

一、VS2017新建工程
VS2017创建MFC ActiveX工程的教程很多,在此简单的写一下如何新建一个MFC ActiveX工程。

  1. 新建工程第一步新建工程
  2. 默认,直接点击下一步下一步
  3. 由于不需要显示AboutBox,取消打勾“有关于对话框”,点击完成
    在这里插入图片描述
  4. 建好的工程如下图
    建好的工程

二、示例代码编写
js可以调用的ocx函数,一般写在CDemoAXCtrl类中,该类即为控件类(一个ActiveX可以写多个控件类,本文就使用默认生成的这个CDemoAXCtrl控件类)
本人在CDemoAxCtrl中添加了两个方法,如下

// JS调用返回 欢迎 xx,hello world!
BSTR CDemoAXCtrl::speakHelloWorld(LPCTSTR pname)
{
	CString res("");
	res.Format(_T("您好%s,hello world!"), pname);
	return res.AllocSysString();
}

LONG CDemoAXCtrl::add(LONG a, LONG b) {
	return a + b;
}

仅仅添加方法,JS还不能调用,我们还需要添加如下代码

//DemoAXCtrl.h中,添加如下代码
class CDemoAXCtrl : public COleControl
{
	//此处为默认生成的代码

	// 调度和事件 ID
	public:
		enum {
			dispidSpeakHelloWorld = 1L,
			dispidadd = 2L
		};
	protected:
		// JS调用返回 欢迎 xx,hello world!
		BSTR speakHelloWorld(LPCTSTR name);
		LONG add(LONG a, LONG b);
};
//在DemoAXCtrl.cpp 中添加
// 调度映射

BEGIN_DISPATCH_MAP(CDemoAXCtrl, COleControl)
	DISP_FUNCTION_ID(CDemoAXCtrl, "speakHelloWorld", dispidSpeakHelloWorld, speakHelloWorld, VT_BSTR, VTS_BSTR)
	//VT_I4 表示long; VT_BSTR表示 BSTR;
	//VTS_BSTR 表示 LPCTSTR
	DISP_FUNCTION_ID(CDemoAXCtrl, "add", dispidadd, add, VT_I4, VTS_I4 VTS_I4)
END_DISPATCH_MAP()

DISP_FUNCTION_ID宏被在调度映射中使用,用来定义一个OLE自动化函数。
DISP_FUNCTION_ID( theClass, pszName, dispid,pfnMember, vtRetVal, vtsParams )

  • theClass:类的名字
  • pszName:函数的外部名字
  • dispid
  • pfnMember:成员函数的名字
  • vtRetVal:指定了函数返回类型的值(VT_开头表示返回值类型)
  • vtsParams:指定了函数参数表的一个或多个常量的用空格分隔的列表(VTS_开头表示参数类型,多个参数以空格分隔)
//在DemoAX.idl中添加这两个函数
//  CDemoAXCtrl 的主调度接口
	[ 
		uuid(0266f790-8f07-4038-b5ee-45f75359c010)
	]
	dispinterface _DDemoAX
	{
		properties:
		methods:
			[id(1)] BSTR speakHelloWorld(BSTR name);
			[id(2)] LONG add(LONG a, LONG b);
	};

我们在类视图中可看到上述添加的函数
在这里插入图片描述在这里插入图片描述
通过上述过程,即编写好一个可以js调用的ocx。

三、js调用OCX

<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<TITLE>测试页</TITLE>
</HEAD>
<BODY >
<input type="button" id="Button2" style="width:120px;height:30px;font-size:13px"   name="Button1"   value="测试OCX函数"   onClick="btn1Click();">
<br>
<script>         
	function btn1Click(){
		var DemoAx = document.getElementById("DemoAx");
		var num = DemoAx.add(1,3);
		alert(num);
		var  str = DemoAx.speakHelloWorld("张三");
		alert(str);
	}

</script>
</BODY>
<OBJECT ID="DemoAx" CLASSID="CLSID:1B57AD6F-8E59-4A5F-8829-0276002B872A" width= "0" height="0">
</OBJECT>
</HTML>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风水月

从心底相信自己是成功的第一步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值