JavaScript调用com的两种方式


        这两种调用方式,可以说大同小异,主要区别在于如何找到这个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即可。


[delphi] 
1. procedure TForm1.Button1Click(Sender: TObject);  
2. var
3.   o: IDemo;  
4. begin
5. .Create;   
6. .Method1('123');  
7. end;



        3、前面证明这个dll已经没有问题,现在通过com来调用一下:

             (1)



[html] 
1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4. <title>TestAxObj</title>
5. </head>
6. <body style="background-color:whitesmoke; margin:5px">
7. <form method="post" action="">
8. <object id="tc1" name="shangj" width="200px" height="20px" style="background-color:red;"
9. classid="CLSID:1C93CD11-2021-4D39-ABA2-FDBBEC655F23">
10. </object>
11.   
12. <script type="text/javascript" language=javascript>
13. tc1 = document.getElementById("shangj");  
14. tc1 = document.getElementById("tc1");均可以  
15. s = "test";  
16. s = tc1.Method1("123");    
17.         alert(s);  
18. </script>
19. </body>
20. </html>



其中1C93CD11-2021-4D39-ABA2-FDBBEC655F23是由下面获取的

[delphi] 
1. LIBID_Project1: TGUID = '{DAA74E33-0A12-452A-A0AA-8AA1CE239806}';  
2.   
3. IID_IDemo: TGUID = '{DC66EC7C-FA4E-4593-ACB0-92E477F297FD}';  
4. CLASS_Demo: TGUID = '{1C93CD11-2021-4D39-ABA2-FDBBEC655F23}';

(2)


[html] 
1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4. <title>TestAxObj</title>
5. </head>
6. <body style="background-color:whitesmoke; margin:5px">
7. <form method="post" action="">
8. <script type="text/javascript" language=javascript>
9. tc1 = new
10. s = "test";  
11. s = tc1.Method1("123");    
12.         alert(s);  
13. </script>
14. </body>
15. </html>

        通过JavaScript来调用com的方式,之前就因为项目需要,所以处理过,但是之前觉得没有什么所以也没有记录什么的,昨天突然想找这方面的资料,结果一时间有些困难,现在讲这些内容在整理一下,算是个备忘吧。

        这两种调用方式,可以说大同小异,主要区别在于如何找到这个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即可。


[delphi] 
1. procedure TForm1.Button1Click(Sender: TObject);  
2. var
3.   o: IDemo;  
4. begin
5. .Create;   
6. .Method1('123');  
7. end;



        3、前面证明这个dll已经没有问题,现在通过com来调用一下:

             (1)

[html] 
1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4. <title>TestAxObj</title>
5. </head>
6. <body style="background-color:whitesmoke; margin:5px">
7. <form method="post" action="">
8. <object id="tc1" name="shangj" width="200px" height="20px" style="background-color:red;"
9. classid="CLSID:1C93CD11-2021-4D39-ABA2-FDBBEC655F23">
10. </object>
11.   
12. <script type="text/javascript" language=javascript>
13. tc1 = document.getElementById("shangj");  
14. tc1 = document.getElementById("tc1");均可以  
15. s = "test";  
16. s = tc1.Method1("123");    
17.         alert(s);  
18. </script>
19. </body>
20. </html>



其中1C93CD11-2021-4D39-ABA2-FDBBEC655F23是由下面获取的



[delphi] 
1. LIBID_Project1: TGUID = '{DAA74E33-0A12-452A-A0AA-8AA1CE239806}';  
2.   
3. IID_IDemo: TGUID = '{DC66EC7C-FA4E-4593-ACB0-92E477F297FD}';  
4. CLASS_Demo: TGUID = '{1C93CD11-2021-4D39-ABA2-FDBBEC655F23}';

(2)


[html] 
1. <html>
2. <head>
3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4. <title>TestAxObj</title>
5. </head>
6. <body style="background-color:whitesmoke; margin:5px">
7. <form method="post" action="">
8. <script type="text/javascript" language=javascript>
9. tc1 = new
10. s = "test";  
11. s = tc1.Method1("123");    
12.         alert(s);  
13. </script>
14. </body>
15. </html>