ATL、ActiveX、OLE及组件之间的关系 .

在RichEdit控件中插入OLE对象(ActiveX控件)   有时候,我们需要在一个容器中插入各种不同的对象,比如,QQ聊天对话框里可以插入各种静态和动态的图片,甚至还可以插入flash文件,这些都是通过OLE技术来实现的。OLE技术是基于COM的,而COM又是非常复杂的东西,想要学习COM得花很多的时间,《COM技术内幕》,《COM原理和应用》,《INSIDE OLE 2》都是非常好的学习COM和OLE的书,但要把这些书啃完,弄懂,几个月甚至半年都过去 阅读详情

ActiveX控件是微软公司提供的功能强大的程序设计和开发技术,是COM组件开发技术的重要组成部分。它是OLE的第三个版本,对原先OLE控件的最大扩展是增加了Internet功能,它不仅可以在支持OLE控件的容器中使用,更可以作为一个Internet控件,直接成为网页的一部分。另外,ActiveX控件作为一种可重用的组件,相当于一个封装好的代码模块,它是通过其方法、属性、事件来与应用程序进行通信的,此外,ActiveX控件是与开发语言无关的。用户在使用控件时不必考虑它是VC还是用VB等其它语言开发的,应用程序都是通过COM与控件进行通信的。可见,任何支持ActiveX控件的软件平台上都可以使用ActiveX控件,它使得不同厂商所开发的控件可以真正地组装在一起,从而令软件的生产过程类似于硬件业的各个插件的装配过程一样,实现了软件的工业化,大大降低了软件的开发成本,极大地提高了软件的生产效率,实现了软件资源的共享。
  ATL技术
  1)ATL
  ATL是ActiveX Template Library 的缩写,它是一套C++模板库。使用ATL能够快速地开发出高效、简洁的代码(Effective and Slim code),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。从Microsoft Visual C++ 5.0版本开始,Microsoft把ATL集成到Visual C++开发环境中。目前,ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C++开发人员的重视。
  在ATL产生以前,开发COM组件的方法主要有两种:一是使用COM SDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。
  直接使用COM SDK开发COM组件是最基本也是最灵活的方式。但是,这种开发方式的难度和工作量都很大,一方面,要求开发者对于COM的技术原理具有比较深入的了解,另一方面,直接使用COM SDK要求开发人员自己去实现COM应用的每一个细节,完成大量的重复性工作。
  使用MFC提供的COM支持开发COM应用可以说在使用COM SDK基础上提高了自动化程度,缩短了开发时间。MFC采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能。但使用MFC开发的COM组件,尤其是ActiveX控件的开发,会产生相当大的代码冗余,而且必须要依赖于MFC的运行时刻库才能正确地运行。
  ATL技术是目前开发COM组件的一种比较理想的技术。ATL中所使用的基本技术包括COM技术、C++模板类技术(Template)以及C++多继承技术(Multi-Inheritance) 。
  2) ATL的基本使用
  使用ATL开发一个COM应用基本可以分为以下几个步骤:
  (1)创建一个新的ATL工程,并对工程的选项进行适当的配置。
  (2)向新创建的工程添加新的ATL类,并对该类进行一些初始配置工作。
  (3)根据COM应用的基本要求向新的ATL类加入新的接口定义,并实现相应的接口成员函数。
  (4)编译连接工程,注册COM应用。
  利用ATL技术创建ActiveX控件CircleCtl

  1) 创建ATL项目

  使用ATL COM AppWizard 创建ATL框架为该项目命名为Circle,按照向导提示向下做,采用默认设置,即Server Type类型为Dynamic Link Library(DLL)。

  2) 向ATL项目添加ActiveX控件

  首先从Insert菜单项中选择New ATL Object…调出 ATL Object Wizard对话框,然后左边Category列表选择Object,右边相应地选择Full Control,如图(1)所示。按Next继续,出现 ATL Object Wizard属性对话框,如图(2),在Names选项卡中,我们只需要在Short Name 编辑框输入CircleCtl即可,其它系统就会自动给定,也可以修改,我们这里保持系统给定状态;在Attributes 选项卡中,选择 Support ISupportErrorInfo 和 Support Connection Points 两个复选框,这两项分别支持出错信息和连接点;Miscellaneous选项卡保持默认设置;Stock Properties中我们把FillColor添加到支栏中,确定之后就把该控件加到项目中了。

   

  图1 图2

  3)为ActiveX控件添加自定义属性

  现在来添加Circle控件的一个基本属性——Radius。

  在Workspace Windows中Class View状态下,右击 ICircleCtl接口,选择Add Property,属性类型为short,名为Radius,参数为空。系统会自动生成get_Radius和put_Radius两个成员函数。在CCircleCtl中添加m_radius变量,用来存储半径。在CCircleCtl的构造函数中将其初始化为50,并在get_Radius函数中添加*pVal=m_radius; 在put_Radius函数中添加m_radius=newVal; FireViewChange();用来及时更新视图。对于Radius的属性,我们通过修改控件的绘制代码来使它起作用。

  4) 修改ActiveX控件的绘制代码实现属性交换

  首先,在CCircleCtl的构造函数中对绘制圆的填充色进行初始化,将它的初始值设为红色,即m_clrFillColor=RGB(255,0, 0)。

  接下来,我们需要几个全局变量来保存控件区域的信息,在CircleCtl.h中添加如下变量:

  static POINT CenterPt; 
  static long RectHt = 0; 
  static long RectWd = 0;

  然后修改OnDraw函数,在该绘制函数中,使用 Windows API中标准的HDC、HPEN、HBRUSH以及SelectObject、Ellipse等结构和函数来实现绘制的。例如:

  // 创建画笔和画刷并选中颜色画圆

  hPen = (HPEN)GetStockObject(BLACK_PEN);

  hOldPen = (HPEN)SelectObject(hdc, hPen);

  hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);

  hOldBrush = (HBRUSH)SelectObject(hdc, hBrush);

  hBrush = CreateSolidBrush(colFore);

  SelectObject(hdc, hBrush);

  Ellipse (hdc, (CenterPt.x - m_radius), (CenterPt.y - m_radius), (CenterPt.x +m_radius),(CenterPt.y+ m_radius));

  5) 为ActiveX控件添加事件

  现在将向ATL控件中添加Click和RClick事件。如果用户在矩形区内点击,则会激发相应事件。现在要向ICircleCtlEvents接口添加Click方法,首先在“ClassView”中选中“ICircleCtlEvents”右击,选择Add Method,出现如下对话框,并按下图设置,最后点“OK”按钮就可以添加Click事件的实现方法。用同样的方法添加RClick事件,参数与Click事件一致。接下来我们要为控件实现连接点接口IConnectionPoint和连接点容器接口IConnectionPointContainer。编译好Circle.idl文件,生成对应的Circle.tlb,在“ClassView”中选中“CCircleCtl”,右击,在Popup菜单中选择“Implement Connection Point”命令,在弹出的对话框中选中“_ICircleCtlEvents”接口。在类中定义了以两个坐标为参数的Fire_Click和Fire_RClick方法,调用这两个方法就可以在控件中激发响应的事件。

  最后,添加激发事件的代码,我们分别在鼠标左键和右键按下的消息响应中进行处理,激发响应的事件,例如OnLButtonDown函数部分代码如下:

  WORD xPos = LOWORD(lParam); //鼠标水平坐标
  WORD yPos = HIWORD(lParam); // 鼠标垂直坐标
  Fire_Click (xPos, yPos); //执行触发函数

  至此,可以在ActiveX Control Test Container中测试该控件。

  网页中使用ActiveX控件

  在控件生成时,系统同时生成了一个CircleCtl.htm文件,在VC编辑环境下打开该文件,在和之间加上如下的VBScript:

<SCRIPT LANGUAGE="VBScript">
<!--
Sub CircleCtl_Click(x, y)
 If CircleCtl.Radius <100 Then
  CircleCtl.Radius = CircleCtl.Radius+1 ‘半径加1
 Else
  MsgBox(“Radius must be less than 100!”)
 End If
End Sub
Sub CircleCtl_RClick(x, y)
 If CircleCtl.Radius >=1 Then
  CircleCtl.Radius = CircleCtl.Radius-1 ‘半径减1
 Else
  MsgBox(“Radius mustn’t be less than 0!”)
 End If
End Sub
-->
</SCRIPT>

  注意保存。然后在“我的电脑”中打开该htm文件,用鼠标单击圆,半径变大,右击圆半径变小。

  结束语

  本文介绍了基于ATL技术以及使用该技术实现了一个简单的圆的控件CircleCtl并且介绍了其在网页中的使用。ActiveX控件作为可重用的代码组件,不仅应用广泛,还可节约开发时间。它将大量的实现细节隐藏起来,以简明的接口与用户名交互,易于使用。对ActiveX技术的研究已经成为当今软件业的热点和潮流。

用SDK玩转ActiveX 调用ActiveX控件?呃,这实在不是一件容易的事情:用各种封装精良的Framework(MFC、VCL等等)的话,最后成品EXE的体积难免偏大;用SDK虽然可以有效地减小这个体积,但是往往又无从下手——总之,这似乎是一件鱼与熊掌不能兼得的憾事。还好,“不容易”并不代表“不可能”,李马在本文中要介绍给诸位的,就是“玩转”ActiveX的一种方法,这种方法包括了从ActiveX控件调用到Active 阅读详情

相关推荐

从“氛围编程“到“智能体工程“:AI编程范式的认知跃迁与工程实践

摘要: 2026年,ClaudeCode负责人鲍里斯·切尔尼提出用“智能体工程”(Agent Engineering)替代流行的“氛围编程”(Vibe Coding),认为后者过于主观,无法体现AI编程的系统化与工程化本质。智能体工程强调记忆系统、工具编排、任务分解、可观测性等核心技术,将AI编程从“玄学辅助”升级为可度量、可规模化的工程学科。本文通过对比术语差异、构建知识体系,并结合代码实例(如带记忆系统的代码生成Agent和可观测性系统),展示了智能体工程的实际应用。行业案例(如ClaudeCode的并

yyq916的博客 1061

基于VC++中ATL创建ActiveX控件的探讨

ActiveX控件是微软公司提供的功能强大的程序设计和开发技术,是COM组件开发技术的重要组成部分。它是OLE的第三个版本,对原先OLE控件的最大扩展是增加了Internet功能,它不仅可以在支持OLE控件的容器中使用,更可以作为一个Internet控件,直接成为网页的一部分。另外,ActiveX控件作为一种可重用的组件,相当于一个封装好的代码模块,它是通过其方法、属性、事件来与应用程序进行通信的

龙之吻的专栏 1358

生物信息学实战:如何用STRING数据库和R语言搞定蛋白互作网络分析(附完整代码)

本文提供了一份完整的生物信息学实战指南,详细介绍了如何利用STRING数据库和R语言进行蛋白互作网络分析。从差异表达基因列表出发,涵盖数据准备、数据库连接、网络构建到高级可视化与模块识别的全流程,并附有可复现的完整R代码,帮助研究人员深入解析转录组数据背后的蛋白互作关系。

milk5的博客 947

ATL的dll与Qt程序通信和传递消息

ATL的dll与Qt程序通信和传递消息 开发时遇到的需要完成的需求是:Windows右键菜单拓展,增加菜单项,但具体增加的菜单项的名称需要从Qt应用程序中获取状态进而显示不同名称,因此需要ATL的dll与Qt应用程序之前进程消息传递和通信。 Windows下发送消息的方法有几种: SendMessage:阻塞的,等窗口程序处理完消息再返回。 PostMessage:不阻塞,将消息放到消息队列中立即返回。通过指定目标窗口句柄来确定目标线程,通常情况下由窗口过程来处理消息。 SendMessageTimeout

Willow的博客 812

告别误唤醒!S32K3xx低功耗设计避坑指南:Fast Standby模式与WISR寄存器操作详解

本文深入解析了NXP S32K3xx系列MCU在低功耗设计中常见的误唤醒问题,并提供了基于Fast Standby模式的解决方案。文章重点剖析了DCMRWF5寄存器的配置方法、WISR/WISR_64唤醒中断状态寄存器的标志位处理策略,以及如何利用32KB Standby SRAM保存唤醒状态,从而帮助开发者构建稳定可靠的汽车电子低功耗系统。

weixin_29163857的博客 362

HP DL380G9 iLO降级Degrated及存储失败storage Failed报错如何解决?

HP DL380G9 iLO降级(Degrated)及存储失败(storage Failed)报错如何处理? ©Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者https://blog.51cto.com/lander 2018/09/7 7:30 问题描述 某沙特公司搭建的虚拟化环境中有一台ESXi主机报Storage Fialed警告但是仍...

weixin_34226182的博客 4849

OLE、ActiveX、COM、ATL联系与区别

COM技术

zhoufei95的博客 1795

从零到一:QT for OpenHarmony 开发环境实战搭建与踩坑指南

本文是一份详尽的QT for OpenHarmony开发环境搭建实战指南。文章手把手教你如何在Windows和macOS系统上,从环境准备、核心工具(DevEco Studio与社区版QT SDK)安装配置,到创建首个QT Quick项目、解决构建部署中的常见问题,最终实现应用在OpenHarmony设备上运行。内容涵盖关键配置修改、资源管理及深度踩坑经验,旨在帮助开发者高效开启跨平台开发之旅。

weixin_29190573的博客 326

com,ole,atl,activex的区别和联系

转载自http://blog.csdn.net/xmlyxb/article/details/4251462 com,ole,atl,activex的区别和联系       根据网上资料和自己的理解,做的一个初步总结,随着认识的深入,将来再做修改: COM是microsoft制定的一个组件软件标准,跟unix上的CORBA一样。凡是遵循COM标准开发出来的组件称为COM组件。简单

simeone18的专栏 3372

【屠龙之术】SAP 欧洲公司 高级合规性报表 FEC

所谓FEC ,其实是法国税务局要求法国的公司,每年要向税务局进行提交的税务报告,这个报告有特殊的格式,进行加密,法国公司要在收到税务局通知以后,及时进行报送,如果不报送,或者报送不合格文件,将面临5000欧的罚款。-----------------------------------------------进入正文----------------------------------------------------------------------有专门的T-code,PPT我就不贴了,我直接截图。

竹大的博客 1961

DAC8568 Controller

DAC8568 ControllerDAC8568 简介串行接口三级目录 DAC8568 简介 PIN Description Name Description LDAC‾\overline{LDAC}LDAC load DACs SYNC‾\overline{SYNC}SYNC 低电平有效,电平触发控制, 该输入为输入数据的帧同步信号. 当SYNC为低,使能DAC内输入移位寄存器,并在随后的所有时钟沿采样数据。 在第32个时钟之后,DAC更新输出。 若不到32个时钟SYNC被置高(即

u010170039的博客 5130

ATL建立ActiveX控件(一)

   代码下载http://download.csdn.net/source/1458175   在VC中进行控制编程可以用MFC的OCX形式,也可以用ATL的活动模板库。MFC所做出来的控件比较大,ATL相对小很较多,这时我们如果是在网页上使用,ATL的优势就会突显出来。      ATL编写控件比MFC要难一些,所谓的难就是ATL中的编程向导没有MFC中的那么好用。有好多的东东要自己手

markstudio的专栏 4442

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

ATL、ActiveX、OLE及组件之间的关系

ActiveX控件是微软公司提供的功能强大的程序设计和开发技术,是COM组件开发技术的重要组成部分。它是OLE的第三个版本,对原先OLE控件的最大扩展是增加了Internet功能,它不仅可以在支持OLE控件的容器中使用,更可以作为一个Internet控件,直接成为网页的一部分。另外,ActiveX控件作为一种可重用的组件,相当于一个封装好的代码模块,它是通过其方法、属性、事件来与应用程序进行通

gooer的专栏 1251

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深度学习工具包 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")

全面深入学习OLE技术

全面深入学习OLE技术 引言(问题的提出) 1.如何将同步软件的联系人/日历/任务/邮件等信息导入到微软的OutLook软件中 为了解决此问题,就需要用到微软的OLE技术。 涉及相关技术有:OLE,OLE Automation,ActiveX,COM等技术。本文企图就这些技术讲解其背景,其历史,其发展变革,其相互关系。 一.OLE技术是什么? OLE是Object Link Embeded此三个单词的缩写。对象的链接和嵌入 二.OLE技术出现的历史背景: 为了使得那些没有太多专业知识的用户能

whl0071的专栏 7673

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

用ATL和MFC来创建ActiveX控件

  摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发。MFC代表了创建独立的Windows应用的一种简单、一致的方法;ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码。这两种框架在它们对于开发ActiveX的用途上会合了。我们将看看这两种框架是如何适用于创建ActiveX控件的——突出其优缺点,亲自经历创建一个控件的过程——以便你能够决定何时

步入什么 3387

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

用ATL开发和部署ActiveX网页控件

摘要  ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程。学习使用ActiveX让浏览器访问客户端的硬件资源。 关键字 ATL,ActiveX控件,COM组件 一、前言 在B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等。对于一个完善系统来说,往往很多时候又需要控制这些资源

jxufewbt的专栏 3481

STL ATL WTL MFC, COM OLE ActiveX区别与联系

MFC、WTL 、ATL、STL联系与区别 这个要先从C++和VC++说起! c++是一门语言,它与平台无关。只要能提供c++编译器(或者交叉编译器)的平台,就能用c++编程。基本上常见的操作系统都有C++编译器或交叉编译器,所以你可以认为几乎所有的平台都可以使用C++编程。 首先要明确,严格来说VC++不是语言,而是一个工具软件。他甚至不是编译器,而是一个开发环境(VC++的编译器实际上只

碎虚空 1406

ATL与COM之间的关系、ATL的特点与基本使用方法

ATL,Active Template Library活动模板库 是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等等控件。 ATL简介     一. 什么是ATL    自从1993年Microsoft首次公布了COM技术以后...

htpidk的博客 847

[转]用ATL开发和部署ActiveX网页控件

 摘要  ActiveX插件技术广泛的运用于B/S系统中,本文通过一个项目实例,详细介绍用ATL开发和部署ActiveX网页控件的过程。学习使用ActiveX让浏览器访问客户端的硬件资源。 关键字 ATL,ActiveX控件,COM组件 一、前言 在B/S结构的系统中,出于安全性考虑一般不准许浏览器访问客户端的硬件资源,如控制打印机,照相机等。对于一个完善系统来说,往往很多时候又需要控制这些资源。

matrix2009的专栏 1910
上一篇: 使用 Visual Studio 分析器找出应用程序瓶颈
下一篇: 【转】MFC在VS2010中开发ActiveX控件,设置测试容器方案
playStudy
博客等级 码龄19年 275粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值