通过JavaScript来调用com的方式,之前就因为项目需要,所以处理过,但是之前觉得没有什么所以也没有记录什么的,昨天突然想找这方面的资料,结果一时间有些困难,现在讲这些内容在整理一下,算是个备忘吧。
(2)
其中("Project1.Demo")是由同上的内容获取的。测试一下,就可以看到提示信息了。
这两种调用方式,可以说大同小异,主要区别在于如何找到这个com的组件,下面就介绍一下:
1、首先使用delphi创建一个com,这个com有一个方法:function Method1(const AData: WideString): WideString;将传入的值返回。
2、为了保证这个com是可以运行的,首先建了一个delphi的例子,来通过com的方式调用,就是一个按钮,点击一下将com取回的值设置为窗体的标题,测试了一下ok,注意:这个com能使用的前提是这个com已经注册了(通过regsvr32注册过了),否则会提示没有注册,在通过type导入com时可能会提示“ole”错误,这个错误是由于com需要管理员权限,使用管理员权限开启delphi即可。
- procedure TForm1.Button1Click(Sender: TObject);
- var
- o: IDemo;
- begin
- o := CoDemo.Create;
- Caption:= o.Method1('123');
- end;
3、前面证明这个dll已经没有问题,现在通过com来调用一下:
(1)
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>TestAxObj</title>
- </head>
- <body style="background-color:whitesmoke; margin:5px">
- <form method="post" action="">
- <object id="tc1" name="shangj" width="200px" height="20px" style="background-color:red;"
- classid="CLSID:1C93CD11-2021-4D39-ABA2-FDBBEC655F23">
- </object>
- <script type="text/javascript" language=javascript>
- var tc1 = document.getElementById("shangj");
- //var tc1 = document.getElementById("tc1");均可以
- var s = "test";
- s = tc1.Method1("123");
- alert(s);
- </script>
- </body>
- </html>
其中1C93CD11-2021-4D39-ABA2-FDBBEC655F23是由下面获取的
- LIBID_Project1: TGUID = '{DAA74E33-0A12-452A-A0AA-8AA1CE239806}';
- IID_IDemo: TGUID = '{DC66EC7C-FA4E-4593-ACB0-92E477F297FD}';
- CLASS_Demo: TGUID = '{1C93CD11-2021-4D39-ABA2-FDBBEC655F23}';
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
- <title>TestAxObj</title>
- </head>
- <body style="background-color:whitesmoke; margin:5px">
- <form method="post" action="">
- <script type="text/javascript" language=javascript>
- var tc1 = new ActiveXObject("Project1.Demo");
- var s = "test";
- s = tc1.Method1("123");
- alert(s);
- </script>
- </body>
- </html>