zoukankan      html  css  js  c++  java
  • 在javascript中使用com组件的方法

    转载自:  http://dhailin.blog.163.com/blog/static/230738322011128102043880/

     

     

    首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法:

    1. STDMETHODIMP Ctest::test(void)    //无输入输出参数  
    2.   
    3. {  
    4.   
    5.      // TODO: 在此添加实现代码  
    6.      MessageBox(NULL,L"test",L"test",MB_OK);  
    7.   
    8.    
    9.   
    10.      return S_OK;  
    11.   
    12. }  
    13.   
    14.    
    15.   
    16. STDMETHODIMP Ctest::test1(BSTR a1)   //有一个字符串输入参数  
    17. {  
    18.   
    19.      // TODO: 在此添加实现代码  
    20.     MessageBox(NULL,a1,L"test",MB_OK);  
    21.   
    22.      return S_OK;  
    23.   
    24. }  
    25.   
    26. STDMETHODIMP Ctest::test3(BSTR* a1)  //有一个BSTR* 输出参数  
    27. {  
    28.   
    29.      // TODO: 在此添加实现代码  
    30.    
    31.   
    32.      MessageBox(NULL,L"test3",L"test",MB_OK);  
    33.   
    34.      *a1=::SysAllocString (L"烽火连三月家书抵万金");  
    35.   
    36.      return S_OK;  
    37.   
    38. }  


     

    COM 中的上述三个方法分别演示无输入输出参数、有一个输入参数、有一个输出参数三种情况。程序编制好后,用regsvr32在系统中注册组件,然后就可以在IE中用javascript调用com 组件的方法了,分两种情况掉用,示例如下:

    1、   直接调用com方法

    建立一个html文本,并输入以下内容:

    1. <html>  
    2.   
    3. <head>  
    4.   
    5. <title> 调用com组件的方法示例 </title>  
    6.   
    7. <script language="javascript">  
    8.   
    9. document.write("<hr>")  
    10.   
    11. var xml=new ActiveXObject("atldll.test.1")  
    12.   
    13. xml.test()  
    14.   
    15. xml.test1("向com方法中传递参数并调用com方法")                
    16.   
    17. var str=xml.test3() //从com方法中返回参数  
    18. document.write("str"+str)  
    19.   
    20. document.write(“<hr>”)  
    21.   
    22. </script>  
    23.   
    24. </head>  
    25.   
    26. <body>  
    27.   
    28. 演示IE脚本程序中调用com组件的方法  
    29. </body>  
    30.   
    31. </html>  


     

    2、   在javascript函数中调用com方法

    建立一个html文本,并输入以下内容:

    1. <html>  
    2.   
    3. <head>  
    4.   
    5. <title> donghailin active object </title>  
    6.   
    7. <script type="text/javascript">  
    8.   
    9. function displaymessage()  
    10.   
    11. {  
    12.   
    13. document.write("<hr>")  
    14.   
    15. var xml=new ActiveXObject("atldll.test.1")  
    16.   
    17. xml.test()  
    18.   
    19. xml.test1("向com组件传递字符串")                
    20.   
    21. var str=xml.test3()  //从com组件返回字符串  
    22. document.write("str"+str)  
    23.   
    24. document.write(“<hr>”)  
    25.   
    26. }  
    27.   
    28. </script>  
    29.   
    30. </head>  
    31.   
    32. <body>  
    33.   
    34. <form>  
    35.   
    36. <input type="button" value="Click me!" onclick="displaymessage()" >  
    37.   
    38. </form>  
    39.   
    40. </body>  
    41.   
    42. </html>  

    注意编写的com组件供其他系统调用,因此输入输出参数字符串应是BSTR类型。

    3、设置com组件的属性的方法

    首先在com组件中设置属性。在接口类中赠加属性变量

    BSTR m_bstr;

    右键单击接口,选择“赠加”-〉“添加属性”在”添加属性向导中“输入属性类型” 中输入参数类型“BSTR” ,“属性名”输入“bstr",向导自动生成属性函数put_bstr和get_bstr,如下:


     

    1. STDMETHODIMP Ctest::get_bstr(BSTR* pVal)  
    2. {  
    3.  // TODO: 在此添加实现代码  
    4.  *pVal=m_bstr;  
    5.  return S_OK;  
    6. }  
    7.   
    8. STDMETHODIMP Ctest::put_bstr(BSTR newVal)  
    9. {  
    10.  // TODO: 在此添加实现代码  
    11.  m_bstr=newVal;  
    12.   
    13.  MessageBox(NULL,m_bstr,L"属性测试",MB_OK);  
    14.  return S_OK;  
    15. }  


     

    下面的代码演示在IE的javascript脚本中设置和获得属性

    1. <html>  
    2. <head>  
    3. <title> donghailin active object </title>  
    4.   
    5. <script type="text/javascript">  
    6. function displaymessage()  
    7. {  
    8. document.write("<hr>")  
    9. var xml=new ActiveXObject("atldll.test.1")  
    10. xml.bstr="满园春色锁不住一枝红杏出墙来"  //属性是bstr,C++ 中属性设置是put_bstr(...)  
    11. document.write("属性返回值是:"+xml.bstr)  //c++中获得属性值get_bstr(变量指针)  
    12. document.write("<hr>")  
    13. }  
    14. </script>  
    15.   
    16. </head>  
    17. <body>  
    18. <table   align=center   width=50>    
    19. <form>  
    20. <input type="button" value="Click me!" onclick="displaymessage()" >  
    21. </form>  
    22. </table>  
    23.   
    24. </body>  
    25. </html>  

  • 相关阅读:
    gnuplot 让您的数据可视化
    sort
    sed
    AWK
    STA之RC Corner再论
    STA之RC Corner拾遗
    网络编程释疑之:TCP半开连接的处理
    Task 任务内部揭秘
    Task 线程任务
    【转】SQL Server、Oracle、MySQL和Vertica数据库常用函数对比
  • 原文地址:https://www.cnblogs.com/lidabo/p/3256211.html
Copyright © 2011-2022 走看看