本文通过vs2010制作可以供javascript调用的dll
本文旨在完成一个c/c++编写的dll,里面有个方法,输入参数为long num返回参数为long* sum=num*10,然后通过js调用这个方法。
一 创建ATL项目
本机环境为64位win7操作系统,使用工具为vs2010
文件--新建--项目,找到ATL项目,输入项目名称,点击确定。(这里我们使用Test作为项目名称)
2 进入下个页面直接点击下一步
3 进入下个页面直接点完成
4 可以看到以下界面
5 右键点击 项目名称Test, 添加--类
6 在新弹出窗口中选中 ATL简单对象,点击添加
7 在新界面中填入类名,我们用Test,另外在ProgID里面填上TTT(这个我们js中要用到)
8 点击完成,至此ATL项目创建成功
遇到这两个地方都点是
二 添加方法
1 视图--类视图,打开Test,找到ITest
2 右键点击ITest,添加--方法
3 进入添加方法界面,填写方法名字test,选择传入参数和传出参数。
添加入参
添加返回参数
参数添加完毕
点击完成
4 下面编辑方法。打开 视图--解决方案资源管理器,找到Test.cpp并打开
在方法test里面我们添加以下代码
*sum=num*10;
保存。
5 调整项目模式为release
项目生成
生成成功
在 文件--打开--文件 中找到Test根目录,在release文件夹下, 找到生成的dll文件Test.dll
至此,dll制作成功。
四 注册dll
1 将Test.dll方到C:\Windows\System32下面(如果是64为系统机子,需要放到C:\Windows\SysWoW64下面)
2 用管理员身份打开命令行界面,将目录切换到放置Test.dll的目录(我的机子是C:\\Windows\SysWoW64) 运行 regsvr32 Test.dll
dll注册成功
五 用javascript调用dll
html页面代码如下
<html>
<head>
<title>Document</title>
<script>
var mydll=new ActiveXObject("TTT");
var result=mydll.test(5);
alert(result);
</script>
</head>
<body>
</body>
</html>
用ie浏览器打开以后,出现以下界面
标记控件为安全的 是实现IObjectSafety
具体做法 :atl com app wizard 工程增标记安全控件
1. 在你dll控件的接口实现类的 .h 中继承类列表的末尾添加下面一句话,并在上一行中添加一个逗号;
public IObjectSafetyImpl<"类名", INTERFACESAFE_FOR_UNTRUSTED_CALLER>
2. 将下行添加到 .h 中的 COM 映射:
COM_INTERFACE_ENTRY(IObjectSafety) 即可
3. 如果IObjectSafetyImpl 未定义 , 则包含Atlctl.h