`
jackeysion
  • 浏览: 127579 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

(原创)在bs系统中客户端调用dll组件(js调用pb写的com组件)

阅读更多
用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) 已经成功调用了,当然自己的示例中少了许多异常的处理,只是作为一个参考.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics