一步一步实现ATL开发的ActiveX组件与javascript的交互(一)

摘要:
在后续项目向导中,使用默认配置。Xml:namespaceprefix=vns=“urn:schemas microsoft com:vml”/˃2.添加控件。右键单击解决方案管理器中的项目,然后选择“添加”和“类别”。在“添加类”对话框中,选择ATL类别下的ATLControl类型。单击添加,将显示添加ATLControl向导。参数类型应选择为DOUBLE*,并应选择“retval”复选框。修改后的完整htm代码如下:ATL8.0testpageforobjectCalc˃functionaldd(){varcalc=document.getElementById;varresult=calc.添加(2,3);警报;}functiontest(){varcalc=document.getElementById;varresult=calc.CallWebJs(printMsg('YouareWelcome!!!'));}functionprintMsg{alert;}单击Add按钮,运行结果如下:到目前为止,我们已经实现了从Web到ActiveX的单个调用。

1. 打开VS2008,单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“ATLtest”。在随后出现的项目向导中,使用默认配置即可。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

一步一步实现ATL开发的ActiveX组件与javascript的交互(一)第1张

2. 添加控件

在解决方案管理器中的项目上右击,依次选择“Add”、“Class”,在添加类对话框中选择ATL分类下的ATL Control类型。单击“Add”按钮,将会出现添加ATL Control向导。输入控件名称"calc",注意不要和项目名称相同,在弹出窗口optionas中Interface选择为“Dual”,Support选择connection point,如图一步一步实现ATL开发的ActiveX组件与javascript的交互(一)第2张

注:若使用VS2010在随后出现选择控件要实现的接口的界面,除VS默认添加的实现外,再添加IObjectSafety接口,实现该接口可以避免控件在IE中使用时IE弹出运行的脚本不安全的提示。(vs2008需要自己添加接口).

3. 为控件添加并实现方法

在Class View窗口中右击Icalc接口,依次选择“Add”、“Add Method…”,此处假定我们实现一个加法运算,将方法命名为“Add”,然后添加参数:

一步一步实现ATL开发的ActiveX组件与javascript的交互(一)第3张
需要注意的是对返回值的处理。应将参数类型选定为DOUBLE*,并选中“retval”复选框。

向导结束后,VS自动在calc.cpp中添加了该方法的空实现,略加修改后的方法代码为:

STDMETHODIMP Ccalc::Add(DOUBLE a, DOUBLE b, DOUBLE* result)

{

*result = a + b;

return S_OK;

}

测试该方法:

对VS自动生成的用于测试的htm略做修改来测试添加的方法。修改后的完整htm代码如下:

<HTML>

<HEAD>

<TITLE>ATL 8.0 test page for object Calc</TITLE>

</HEAD>

<BODY>

<OBJECT CLASSID="CLSID:EEE5C4D7-B87B-4F0A-86BC-A517A9F94311"></OBJECT>

<input type="button" value="Add" onclick="add();" />

<input type="button" value="callWebJs" onclick="test();" />

<script type="text/javascript">

function add() {

var calc = document.getElementById('Calc');

var result = calc.Add(2, 3);

alert(result);

}

function test() {

var calc = document.getElementById('Calc');

var result = calc.CallWebJs(printMsg('You are Welcome!!!'));

}

function printMsg(msg) {

alert(msg);

}

</script>

</BODY>

</HTML>

点击Add按钮后运行结果如下:

一步一步实现ATL开发的ActiveX组件与javascript的交互(一)第4张
至此,我们实现了从Web到ActiveX的单项调用。下篇文章将讲述从ActiveX回调js

from:http://hi.baidu.com/hwygy_001/item/b73aa4f27fdd6edb6225d23b

免责声明:文章转载自《一步一步实现ATL开发的ActiveX组件与javascript的交互(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python Aes 加密 解密Raspberry PI 树莓派 远程登录 和 远程桌面下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题

使用VS2008编译了一个程序,使用到自己编译的DLL,丢到某些机子上无法运行,提示“由于应用程序配置不正确,应用程序未能启动”的错误,装了vcredist_x86也没有用,开始以为是DLL的问题,后来换个简单的程序,仍然不行,百撕不得其解,后来上网找,下面有说了很多解决办法。 我最终的解决办法是复制本机中的.manifest文件,修改里面的版本号,复制到提...

CSS函数使用,里面有clip-path使用画各种多边形的原理和示例哦

css函数:指复杂类型或调用特殊处理的组件值类型,在css中,只要带有()的属性都是函数。 相信大家都多多少少都用过一些如rgb()/rgba()/url()等等,其实呢,W3C里面有很多的并且比较好用的css函数。本章博文就是整理了一些常用的使用的函数,方便记忆及以后的开发使用。 颜色函数:(HEX为16进制展示颜色如#eee)   rgb()、rgba...

CSS3动态计算公式——calc()的坑

calc() 函数用于动态计算长度值。 需要注意的是,运算符前后都需要保留一个空格,例如: calc(100% - 10px);任何长度值都可以使用calc()函数进行计算;calc()函数支持 "+", "-", "*", "/" 运算;calc()函数使用标准的数学运算优先级规则;注意: calc(100%-100px);——无法起作用 calc(10...

用Python实现多核心并行计算

平常写的程序,无论是单线程还是多线程,大多只有一个进程,而且只能在一个核心里工作。所以很多应用程序即使正在满载运行,在任务管理器中CPU使用量还是只有50%(双核CPU)或25%(四核CPU) 如果能让一个程序自己建立出多个进程,并且让它们并行运行,那么就可以在不同cpu核心上同时运行,进而实现并行计算啦。 Python的并行计算就是这么做的。 之前的理解...

浏览器滚动条及其影响 calc()

1.浏览器滚动条 默认风格各异,推荐一插件  mCustomScrollbar 不考虑兼容也可自定义样式     链接二 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"...

css3中的width:100vh以及calc(100vh + 10px)

转自:https://blog.csdn.net/qq_24581629/article/details/72377300 vh/vw    vh: 相对于视窗的高度, 视窗被均分为100单位的vh;   vw: 相对于视窗的宽度, 视窗被均分为100单位的vw;   vmax: 相对于视窗的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vma...