ActiveX工程创建与开发详解

使用MFC开发ActiveX控件全过程- - 导读:   Tag   Visual C++是开发ActiveX控件的强大工具,它的特点是开发周期短、便于使用,因此它已经成为开发ActiveX控件的主要工具之一。Visual C++集成开发环境,使用了微软自己的类库MFC,MFC对开发ActiveX控件提供了全面的支持,本文讲述的过程均在Visual C++ 6.0(以下简称VC)中实现。   1、 创建工程:   对于使用过VC的人, 阅读详情

前言

当有些网页应用出于性能、保密等考虑,需要额外开发插件,不同的浏览器支持的插件是不一样的,下面以IE的插件开发进行详细说明。

插件的IDE工具是VS2012.

创建ActiveX工程

打开VS2012,创建新工程,选择如下工程类型:

点击确定后,按照默认设置,点击完成,自动生成如下文件。

其中,UUID是插件的ID,它用于网页的调用:

在网页中调用如下代码所示:

<center>
	<object ID="MFCActiveX" height=768 width=1024
		CLASSID="CLSID:E976D19A-D0DA-4DFE-AC83-C155AB0EE7C9"
		CODEBASE="./MFCActiveX.cab#Version=1,0,0,0">
	</object>
</center>

供网页调用的外部接口

插件需要提供外部接口,供网页调用,例如登录接口。可以参考【AboutBox】接口进行添加,在【MFCActiveXControl1.idl】文件里添加接口声明:

//  CMFCActiveXControl1Ctrl 的主调度接口
	[ 
		uuid(8497EC9C-262F-4A76-8B24-40244D39A63B)	
	]
	dispinterface _DMFCActiveXControl1
	{
		properties:
		methods:

			[id(DISPID_ABOUTBOX)] void AboutBox();
			// 登录
			[id(1), helpstring("method Login")] void Login(BSTR swzUserName, BSTR swzUserPw, BSTR swzIP, short iLang);
	};

在【MFCActiveXControl1Ctrl.cpp】文件添加接口的实现里:

// 调度映射

BEGIN_DISPATCH_MAP(CMFCActiveXControl1Ctrl, COleControl)
	DISP_FUNCTION_ID(CMFCActiveXControl1Ctrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
	DISP_FUNCTION_ID(CMFCActiveXControl1Ctrl, "Login", 1, Login, VT_EMPTY, VTS_BSTR VTS_BSTR VTS_BSTR VTS_I2)
END_DISPATCH_MAP()

在【MFCActiveXControl1Ctrl.h】文件里声明接口实现的函数头形式:

protected:
	// 登录
	void Login(LPCTSTR swzUserName, LPCTSTR swzUserPw, LPCTSTR swzIP, short iLang);

在【MFCActiveXControl1Ctrl.cpp】文件里实现登录的接口:

// 登录
void CMFCActiveXControl1Ctrl::Login(LPCTSTR swzUserName, LPCTSTR swzUserPw, LPCTSTR swzIP, short iLang)
{

	// TODO: Add your dispatch handler code here
}

此外,还可以通过类视图,自动添加函数、变量和事件,但是这里添加的不是外部接口,不支持网页调用。具体添加如下:

说明:此前我接手一个ActiveX的项目,都是手工描画的页面,没有使用MFC的CDialog。维护非常不方便,感觉很奇怪。时间上ActiveX的内部页面开发跟App的UI开发没什么不一样。

网页调用的ActiveX的接口如下:

<script language="javascript" type="text/javascript" for="MFCActiveX" event="PrepareInitInfo">
		var lang = "cn";
		LogCount++;
		if(LogCount <= 1)
		{
			MFCActiveX.Login(szUserName,szPass,szHostIp,"1");
			document.getElementById("MFCActiveX").height=document.documentElement.clientHeight - 20; 
			document.getElementById("MFCActiveX").width=document.documentElement.clientWidth - 20;
		}
  	</script>

ActiveX推送消息给网页

网页接收ActiveX的事件,在idl文件里声明:

//  CMFCActiveXControl1Ctrl 的事件调度接口

	[ 
		uuid(DF467D9D-D259-4A94-8AA0-CBCE1D9F4A9F)	
	]
	dispinterface _DMFCActiveXControl1Events
	{
		properties:
			//  事件接口没有任何属性

		methods:
			// 登录返回的消息
			[id(1)] void ReLogin(int iError, int iLang);
			// 插件初始化消息
			[id(2)] void PrepareInitInfo(void);
	};

在【MFCActiveXControl1Ctrl.h】文件里实现推送给网页的消息接口:

private:
	// 已经调用Relogin发送错误CODE的标志
	bool	m_hasEmittedReloginError;
// 事件映射
	DECLARE_EVENT_MAP()// Dispatch and event IDs
public:
	enum {
		eventidReLogin = 1L,
		eventidPrepareInitInfo,
		dispidLogin = 1L
	};
protected:
	// 登录
	void Login(LPCTSTR swzUserName, LPCTSTR swzUserPw, LPCTSTR swzIP, short iLang);
public:
	// 推送登录返回消息
	void FireReLogin(int iError, int iLang)
	{
		// 已调用过,则返回
		if (m_hasEmittedReloginError)
		{
			return;
		}
		// 设置标志
		m_hasEmittedReloginError = true;
		FireEvent(eventidReLogin, EVENT_PARAM(VTS_I2 VTS_I2),iError,iLang);
	}
	// 推送初始化消息【网页应该等待插件初始化完成后,再进行登录】
	void FirePrepareInitInfo(void)
	{
		FireEvent(eventidPrepareInitInfo, EVENT_PARAM(VTS_NONE));
	}

最后贴上网页【index.asp】调用的完整示例:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Distributive Vision Control System</title>
</head>

<body>
	<script language="javascript">
		var LogCount = 0;
		var lang = "cn";
		var szUserName = new String("<%=Request.Form("UserName")%>");
		var szPass = new String("<%=Request.Form("Pass1")%>");
		var szHostIp = new String("<%=Request.ServerVariables("SERVER_NAME")%>");//new String("192.168.3.12");//

		if((szUserName == "undefined" || szUserName == null || szUserName == "") && (szPass == "undefined" || szPass == null || szPass == ""))
		{
			self.location="login_cn.asp"; 
		}
	</script>

<center>
	<object ID="MFCActiveX" height=768 width=1024
		CLASSID="CLSID:E976D19A-D0DA-4DFE-AC83-C155AB0EE7C9"
		CODEBASE="./MFCActiveX.cab#Version=1,0,0,0">
	</object>
</center>

	<script language="javascript">
		window.onresize = function () 
		{	
			document.getElementById("MFCActiveX").height=(document.documentElement.clientHeight-20)>768?(document.documentElement.clientHeight-20):768; 
			document.getElementById("MFCActiveX").width=(document.documentElement.clientWidth-20)>1024?(document.documentElement.clientWidth-20):1024;
		}
	</script>
	

	<script language="javascript" type="text/javascript" for="MFCActiveX" event="PrepareInitInfo">
		var lang = "cn";
		LogCount++;
		if(LogCount <= 1)
		{
			MFCActiveX.Login(szUserName,szPass,szHostIp,"1");
			document.getElementById("MFCActiveX").height=document.documentElement.clientHeight - 20; 
			document.getElementById("MFCActiveX").width=document.documentElement.clientWidth - 20;
		}
  	</script> 
 
  	<script language="javascript" type="text/javascript" for="MFCActiveX" event="ReLogin(error,iLang)">
                iLang = 1;	
		if(iLang == 1)
		{
			lang = "cn";
				
			if(error == -1){
				alert("登录超时,请检查网络连接。");
				self.location="login_cn.asp?error="; 
				//
			}
			else if(error == -2){
				alert("用户账户名或密码错误!");
				self.location="login_cn.asp?error="; 

			}
			else if(error == -3){
				alert("登录帐户不存在!");
				self.location="login_cn.asp?error=";

			}
			else{
				self.location="login_cn.asp?error=";
				window.opener=null; window.open('','_self',''); window.close();
			}
		}
		
  	</script> 
 
<script> 
   lock = function(theEvent) {
        if (theEvent != null) {
                event = theEvent;
        }
        // 擋滑鼠右鍵選單事件
        if (event.type == "contextmenu") {
            return false;
        // 擋滑鼠中鍵事件
        } else if (event.type == "mousedown") {
        	// 擋滑鼠左鍵事件
                if (event.button == 1) {
                        return false;
                }
        	// 擋滑鼠右鍵事件
                if (event.button == 2) {
                        return false;
                }
        	// 擋滑鼠中鍵事件
                if (event.button == 4) {
                        return false;
                }
	}
	// 屏蔽按住Ctrl键或者鼠标滚动
	else if (event.ctrlKey || event.type == "mousewheel") {
		return false;
        } 
        // 擋 IE 按下 F1 鈕時會觸發的 onhelp 事件
	else if (event.type == "help") {
            return false;
        // 擋特定按鍵
        } else if (event.type == "keydown") {
		//alert('catch key down['+event.keyCode+']');
		// 屏蔽Backspace、F5
		if (event.keyCode == 8 || event.keyCode == 116) {
                    return false;
		}
            // 擋 alt、ctrl鍵
            if (event.altKey || event.ctrlKey) {
                    return false;
            }
            // 擋 F3 ~ F10 功能鍵,其中此種寫法只能擋 FF 的 F1 鍵,無法擋 IE 的 F1 鍵
            if (event.keyCode >= 114 && event.keyCode <= 121) {
		//alert('catch Fx key['+event.keyCode+']');
                    try {
                            // IE 要將 keyCode 設為 0 才能真正擋功能鍵,
                            // 但 FF 會丟 Exception,所以用 try-cache 擋住
                            event.keyCode = 0; 
                    } catch(e){}
                    return false;
            }
        }
}

document.onmousedown = lock;
document.onmousewheel = lock;
document.onmouseup = lock;
document.oncontextmenu = lock;
document.onkeydown = lock;
window.onhelp = lock; 
 
</script>
</body>
</html>

 

示例代码请参考:

https://download.youkuaiyun.com/download/ptrunner/11082512

OTN传送网实战指南:从光层到电层的完整架构解析(附配置示例) 本文深入解析OTN传送网从光层到电层的完整架构,涵盖关键组件、技术实现及配置示例。通过高速公路与光传送网的类比,详细介绍了光层超宽传输管道构建、电层业务调度核心引擎以及控制平面智能运维实战。附有典型组网方案与故障排查指南,助力网络工程师高效部署与维护OTN传送网。 阅读详情

相关推荐

从零到一:鲲鹏920服务器上的DeepSeek模型部署全流程解析

本文详细解析了在华为鲲鹏920服务器上部署DeepSeek模型的全流程,包括环境准备、模型服务框架部署、性能优化及生产环境方案。通过ARM架构优化和量化技术,显著提升模型推理效率,适用于企业级AI应用场景,助力国产化技术落地。

weixin_29094775的博客 599

vs2017开发ActiveX(主讲OCX)(九)、添加自定义方法

添加自定义方法 文章目录添加自定义方法前言使用“添加方法向导”添加自定义方法使用“添加方法向导”添加PtInCircle自定义方法通过添加方法向导更改自定义方法 前言 备注:本文所介绍方法,vs2017已经不支持,仅是因教程连贯需要,vs2010是支持的,如有需要的同学可以继续往下看。 自定义方法与常用方法的不同之处在于它们尚未由COleControl实现。 您必须为添加到控件的每个自定义方法提供...

学无止尽,谨言慎行! 1610

onnx入门教程(一):解决模型部署中的难题

直接使用 PyTorch 模型的话,我们修改几行代码就能实现模型输入的动态化。但在模型部署中,我们要花数倍的时间来设法解决这一问题。现在,让我们顺着解决问题的思路,体验一下模型部署的困难,并学习使用自定义算子的方式,解决超分辨率模型的动态化问题。刚刚的报错是因为 PyTorch 模型在导出到 ONNX 模型时,模型的输入参数的类型必须全部是 torch.Tensor。而实际上我们传入的第二个参数" 3 "是一个整形变量。这不符合 PyTorch 转 ONNX 的规定。我们必须要修改一下原来的模型的输入。

图像学习之旅 1128

ActiveX开发详解

配套源码:http://download.youkuaiyun.com/detail/mingojiang/4743623 转载请注明出自:http://blog.youkuaiyun.com/MingoJiang 一、ActiveX基础 1.1什么是ActiveX ActiveX是COM规范的一种实现,前身是OLE(Object Linking and Embedding)。一般读成:ActiveX Ctr...

Chinamming的专栏 710

[数据转换]将NetCDF(NC)文件转换成单个GeoTIFF文件

有时候要提取tif格式数据中的气象数据,但从气象网站上下载的却是NC格式的文件。这就需要我们将NC格式的文件转换成TIF格式的文件。

G_sea_young的博客 1004

谱方法学习笔记-下(超详细)

《谱方法学习笔记》深入介绍了傅立叶谱方法在解决偏微分方程问题中的理论和实践,提供了清晰的步骤、Matlab代码以及对一维、二维波动方程等不同问题的解析,适合对谱方法感兴趣的学习者。

图灵的猫的博客 2853

activex 控件使用过程中出现 “无效的参数数目”

其中一个可能情况是: 为调用映射的 参数类型声明之间添加了逗号 例如: DISP_FUNCTION_ID(CAxGViewCtrl, "SetMapsByBlkSize", dispidSetMapsByBlkSize, SetMapsByBlkSize, VT_EMPTY, VTS_UI4,VTS_UI4,VTS_R8,VTS_R8) 弹出“无效的参数数目”对话框 故改正为

ttlmuyoujj的专栏 2866

ShardingSphere 5.3 系列Spring 配置升级指南 | Spring Cloud 47

在 `5.3.0` 版本以前,`ShardingSphere-JDBC` 同时支持 `Java API`、`YAML`、`Spring Boot Starter` 和 `Spring Namespace` 等配置方式。 - 当新增或更新 API 时,需要调整多项配置文件,工作量大 - 社区需要维护多重配置文档和示例 - `Spring Bean` 生命周期管理容易受到项目其他依赖的影响,比如 `PostProcessor` 无法正常执行 - `Spring Boot Starter` 和 `Spring N

gmHappy 2万+

ocx开发经验,ActiveX开发快速入门

1. ocx下载解压的目标位置,由注册表项指定 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ActiveX Cache 默认为C:\WINDOWS\Downloaded Program Files inf文件也解压到该目录 下载的ocx在资源管理器中不可见,使用dir命令可见。可以使用copy

xiaoxiaoyu85的专栏 8565

AgentScope实战训练营:构建计划可视化管理和HITL的AI智能计划助手

本文基于AgentScope Java SDK和Spring Boot WebFlux,从零构建一个支持SSE流式对话、计划可视化管理和HITL的AI智能计划助手Web应用PlanNotebook。涵盖项目架构设计、ReActAgent初始化、自定义工具注册、Hook机制实现、SSE事件协议定义、前端流式渲染等核心技术点,提供完整可运行的代码示例和详细的REST API参考。

program哲学 399

【RT-DETR多模态融合改进】在前期、中期、中后期、后期多模态融合中添加P6大目标检测层,完整步骤及代码

主题: RT-DETR的多模态融合改进中增加P6大目标检测层方式: 分别在前期融合、中期融合、中-后期融合、后期融合中增加P6多模态融合检测层。内容: 包含融合方式详解以及完整配置步骤,开箱即用,一键运行。原始模型结构如下: 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检测头对应的经过了更多的下采样

Limiiiing的博客 395

VB6.0 ActiveX 控件开发详解 [第一章:创建工程]

前言         在优快云的VB论坛上,我总是能够看见有人这样问“有没有这样的控件,一个列表框,每一个项前面有一个按钮”(这是例子),又或者见到这样:“怎么样做一个ActiveX控件?”,诸如此类,等等。其实ActiveX控件的开发是很实用的,既能整合图形界面,有能更简化

几罗星人的专栏 3万+

Android 15.0 系统开机屏幕设置默认横屏显示

在15.0的系统ROM产品定制化开发中,对于产品需求来说,由于是宽屏设备所以产品需要开机默认横屏显示,开机横屏显示这就需要从 两部分来实现,一部分是系统开机动画横屏显示,另一部分是系统屏幕显示横屏显示,从这两方面就可以做到开机默认横屏显示了

安卓兼职framework和app工程师的博客 719

C++ com编程学习详解

本篇文章就到这里了,希望能够给你带来帮助。

m0_74824865的博客 20

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

[ActiveX]使用VS2010创建MFC ActiveX工程项目

ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能队列运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括web网页,应用程序窗体等等。 ActiveX控件的后缀名是ocx或者dll。一般是以ocx和动态共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或者exe解压成ocx和动态库共存的文件,然后注册ocx文件。 a

超越 1990

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++ ActiveX基础1 使用VS2015创建MFC ActiveX工程项目

C++ ActiveX基础1 使用VS2015创建MFC ActiveX工程项目 1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。 ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后...

qq_37657601的博客 927

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

C++ ActiveX基础1 使用VS2015创建MFC ActiveX工程项目

C++ ActiveX基础1 使用VS2015创建MFC ActiveX工程项目 1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。 ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后...

qq_37657601的博客 711

Qt中创建ActiveX应用

由于最近需要使用ActiveX,一般来说可以使用微软提供的MFC或者ATL框架来开发,由于我个人对这部分内容不是很熟悉,好在Qt也提供对于ActiveX的支持。本文主要记录个人学习ActiveX的一些内容,方便日后查阅。本文以Qt5(5.3.1)提供的ActiveX为参考,但是由于ActiveX这部分比较稳定,因此Qt4应该也是一样的。 概述 Qt提供了QtActiveX模块来支持微软ActiveX的开发,Qt的ActiveX和COM的开发支持两种方式: 支持将已有的COM或者ActiveX空间

全粘工程师 2200

ActiveX控件开发总结

创建ActiveX工程: 可以使用VC建立MFC工程或者ATL工程来进行ActiveX控件开发。使用MFC方式建立,系统会自动实现一些ActiveX控件必须的接口,开发人员只需关注业务就可以了;使用ATL方式建立,开发人员需要实现十几个COM接口(ActiveX实际上是COM的一种),需要对COM有一定的了解。但是使用MFC方式,最后发布的安装包要包含引入了的MFC的DLL(视频控件引入了两个,

9292

vs2010创建ActiveX工程和怎么给ActiveX添加方法

ActiveX控件是注册到电脑上的一个注册库文件,以ocx和dll结尾,可供第三方程序下载和在本地调用接口。下面和大家分享一下怎么通过visual studio2010创建一个Activex工程以及怎么在ActiveX中添加自己的方法。 百度经验:jingyan.baidu.com 工具/原料 电脑 visual studio2010 百度经验...

杨镇宇的博客 636

MFC ActiveX的创建和调用

一、创建 两种方式: 第一种:创建“MFC ActiveX 控件”工程(这种方式建立的ActiveX控件只能在windows操作系统下运行,还必须在windows操作系统下安装c++依赖库安装包,因为MFC是建立在微软的c++动态库的基础上的,若不安装相关库则需要设置为静态MFC Dll编译) 第二种:创建“ATL 项目”。由于使用ATL开发ActiveX控件需要了解co

ruby_doudou的博客 2959

使用VS2010创建MFC ActiveX工程项目

1.ActiveX的基本概念          ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。          ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成O

gk969的专栏 631

c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目

1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。这个容器包括WEB网页,应用程序窗体等。。。 ActiveX控件的后缀名是OCX或者DLL。一般是以OCX和动态库共存的形式打包成cab或者exe的文件放在服务器上,客户端下载后运行安装cab或exe解压成...

diaobo9395的博客 151
上一篇: 《如何化悲愤为思考》中日对照
下一篇: C++【一文说尽赋值运算符重载函数(operator=)】
pstrunner
博客等级 码龄19年 50粉丝 52原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值