用JavaScript直接调用dll组件或其他com组件是不行的,但是JavaScript可以调用activex控件,因此,为了实现js调用dll,在两者之间增加一层activex.即
JavaScript ---> activex ---> com组件
<--- <--- (返回结果)
这里activex是用vb6.0写的,因为感觉vb写activex比较方便,而且也比较容易学.
com组件是用pb8.0写的,并且在注册为com组件(regsvr32 *.dll)
第一步:
需要做一个PB的应用.为了简单起见,可以在PB的应用里只增加一个UO(如果不知道UO,可以学习一下PB的基本知识)具体为File--New 弹出的窗口中选tab PB Object , 选第一个Custom Class ,保存并命名为uo_test,然后给UO添加一个方法(在方法列表里右键--add),命名为 test_dll,给该方法加一个参数(string pname) , 然后方法体写return "hello , " + pname . 关闭uo
下面开始做dll:
File -- New 选Project选项卡,选择第二行最后一个"COM/MTS Component"
保存为test. 关闭其他的所有uo,只保留这个,这时工具栏只有2行,其中第二行保存按钮后面的三个分别为 Select Objects,Properties,Deploy就是打包dll用到的功能.
先选择 SelectObjects , 将需要的pbl和uo选上,ok. 再选择Properties,有三个tab选项卡,Genel: FileName dll的名字(全路径如D:\uo_test.dll),APpId和TypeLibraryId点击后面的new生成,下面有一个Type Library Version ,是对应dll的版本号.Post-Build Options中将第一项打勾. 选项卡Objects不用改,选项卡Library中将需要的PBl打勾, 点击OK. 最后点击Deploy,即生成了dll组件.
注册dll
通过使用命令: regsvr32 d:\uo_test.dll 注册为com组件
第二步:做activex控件
这里用的是vb6,当然可以选择其他语言如VC,Delphi等,本人对vb比较熟悉所以选择用vb做activex.
打开vb后新建一个"activex 控件"(英文版的是 Activex Control) 工程
将工程改名为 hello_uo,控件改名为CallTest(js里用到)
菜单: 工程 --> 引用 找到 PB80 generated typelib for : d: uo_test.dll打上勾 并点击"确定".
然后切换到代码界面(可以是双击界面),添加一个函数
public function uo_test(pname as string) as String
dim obj as New uo_test.CoClass_test //uo_test为pb工程名,CoClass_test 为 CoClass_+PB的uo名
dim result as string
result = obj.test_dll(pname)//test_dll为pb的test这个uo里的方法(第一步)
uo_test = result //返回值
end function
将控件和工程分别保存为CallTest.ctl,hello_uo.vbp
点击菜单: 文件---生成hello_uo.ocx ,选择保存位置.(如d:根目录)
注册activex控件同PB的dll组件.regsvr32 d:\hello_uo.ocx
第三步:
好了,下面开始写js了. 做一个非常简单的页面:test_dll.html
<html>
<head>
<title>测试读卡</title>
<script type="text/javascript">
function say(){
var obj = new ActiveXObject("hello_uo.CallTest");
var value = document.getElementById("username").value;
if (value == null){
value = "administrator";//默认值
}
var result = obj.uo_test(value);
alert(result);
}
</script>
</head>
<body>
<input type="text" name="username">
<input type="button" onclick="say()" value="打个招呼">
</body>
</html>
代码解释:
其中new ActiveXObject("hello_uo.CallTest")里的字符串hello_uo为vb的工程名,CallTest为控件名
obj.uo_test(value)其中uo_test为vb里自己写的方法.
ok,至此 js -- activex -- com(dll) 已经成功调用了,当然自己的示例中少了许多异常的处理,只是作为一个参考.
分享到:
相关推荐
web通过注册表调用BS客户端,修改注册表,通过注册程序调用本机BS客户端程序
PB做的BS界面系统
BS系统调用CS系统的exe附带入参,ie可以直接通过js进行调用CS的exe,谷歌等浏览器不能直接调用,目前在用的还算稳定尚未出现其他问题。 若非系统有需求,这辈子都不愿意碰BS的调用CS的EXE 遇到这种问题查都没地查
但是在BS平台下,原来的PB代码从客户端转成了IIS上的服务代码,原的“客户端”就成了浏览器,转换后的客户端编程其实就是面向浏览器的编程。 根据目前我对PB11.5所了解的情况,PB11在代码方面可以使用条件编译方式...
客户端打开网页时,点击打印后不跳出选择打印机界面,直接调用客户端默认打印机打印
bs中js调用和设置quest3d,可以通过js实现quest3d中执行动作变更或镜头移动
ASP.NET(BS构架) 调用[启动] IIS服务端exe程序案例 一、本案例使用SB构架调用[启动]IIS服务端exe程序,实现服务端程序执行一系列操作。 二、如果需要启动 客户端 exe程序,则可以考虑使用javascript脚本。 三、...
PB11中CS转BS步骤,看清楚了是PB11的word文档
在C# Winform中怎么来调用B/S中JavaScript脚本语言的方法以及怎么用JavaScript脚本语言来调Winform中的方法。
DefaultCom=广州汉龙计算机系统限公司 DefaultComE=GUANGZHOU HANLON COMPUTER SYSTEM Co.Ltd Home=汉龙软件公司主页 Homehttp=http://www.gzhanlon.com DefaultUnit=管理处 DefaultAdmin=ADMIN [version] OSType=...
公共自行车管理系统用户手册BS-客户端.doc
NULL 博文链接:https://jlwangjinshuang-163-com.iteye.com/blog/2172463
这中方法的优点是采取一种新的安装方式来绕过数字签名验证的问题,可以做到零费用部署在客户端。这段时间并没有白费,找到BS下兼容CS架构的办法了,这也是一种新的思路。整个过程上传上来,给大家分享一下。
中控指纹仪 URU4000B BS JS调用 JAVA ASP 附带说明书 例子 驱动
在bs开发中经常用到的javaScript技术整理在bs开发中经常用到的javaScript技术整理
JavaScript基于WebGL技术实现的三维BS端开发平台(含Cesium 的核心操作库+UI组件库).zipJavaScript基于WebGL技术实现的三维BS端开发平台(含Cesium 的核心操作库+UI组件库).zipJavaScript基于WebGL技术实现的三维BS端...
为了满足日益提高的用户需求,在保留现有CS模式软件系统特点的同时,在系统中增加BS的血液。如何实现这样的需求?如何实现这样的功能呢?本文将阐述如何通过PowerBuilder开发工具实现对IE浏览器的调用与控制。
pb11 CS转BS详细资料1、先把你的程序移植到pb11,用pb11打开workspace和target即可,pb11自动移植,调试能在c/sx下运行正常 2、开始转换了,菜单操作file>New打开[New]选择窗口选[target] - .NET Web Forms ...
bs结构考试系统 bs结构考试系统 bs结构考试系统 bs结构考试系统