zoukankan      html  css  js  c++  java
  • [转]C++基于ATL工程编写ActiveX控件

    开发环境:VS2010

    开发工程:C++ATL项目

    开发目的:创建ActiveX实现js调用

    步骤:

    1.      创建一个ATL工程

    应用程序类型选择动态链接库(DLL),勾选支持COM+1.0,勾选支持部件注册器

    2.      选择类视图,添加接口与类

    如果没有找到类视图,可以在工具栏中添加上视图

    选择工程,右键添加类。选择ATL简单对象。

    输入对象信息。

    此处的ProgID需要注意,填写之后可在js中通过new ActiveXObject(“你的progID”)创建对象。

      
         

             勾选支持中的3个选项,我选择的线程模型为单线程,可根据实际需求修改。完成后会发现已经生成了Add.h和Add.c文件。里面有一些红色波浪线提示错误无需管。

    3.      依然是类视图中,找到对应的接口添加方法,比如我创建的简单对象名称为Add,这里我们就在IAdd节点上右键添加方法。

    添加方法时,需要注意的是out和retval必须为指针类型,否则不让勾选,此处添加三个参数,其中result作为返回值(勾选了retval的参数)。

    会发现你如果勾选了一个retval后,就不会再让你添加参数了,表示只能有一个返回值。仅仅勾选out的参数,js没有效果,C#等可以使用这种函数的out参数。

    4.      找到Add.c文件,在添加完成的函数中实现具体方法。

    5.      编译生成成功后,在工程目录(Debug或者release)下找到AddCom.dll.

    使用regsvr32 AddCom.dll命令注册。提示注册成功后,编写一个html代码测试。

    6.      两种方式创建对象。

    1)  通过object标签创建对象

    1. <object  classid="clsid:4738A542-7AEB-4CE4-86A7-71081B8CE8DA"id="myAddObj"  
    2.   
    3.                            name="myAddObj " ></object>  


    类似于这种标签创建的对象,可以通过js直接访问到myAddObj对象。Classid可以在AddCom.idl文件中查找到,library中的coclass Add对应的id。

    1. library AddComLib  
    2.   
    3. {  
    4.   
    5.     importlib("stdole2.tlb");  
    6.   
    7.     [  
    8.   
    9.         uuid(64EC1270-5626-4FDF-888F-41859FB35E15)       
    10.   
    11.     ]  
    12.   
    13.     coclassCompReg  
    14.   
    15.     {  
    16.   
    17.         [default]interface IComponentRegistrar;  
    18.   
    19.     };  
    20.   
    21.     [  
    22.   
    23.         uuid(FE912C18-0CFB-4DCA-99FA-6E4BC4B07594)       
    24.   
    25.     ]  
    26.   
    27.     dispinterface_IAddEvents  
    28.   
    29.     {  
    30.   
    31.         properties:  
    32.   
    33.         methods:  
    34.   
    35.     };  
    36.   
    37.     [  
    38.   
    39.         uuid(4738A542-7AEB-4CE4-86A7-71081B8CE8DA)       
    40.   
    41.     ]  
    42.   
    43.     coclass Add  
    44.   
    45.     {  
    46.   
    47.         [default]interface IAdd;  
    48.   
    49.         [default,source] dispinterface_IAddEvents;  
    50.   
    51.     };  
    52.   
    53. };  


    2)  通过new ActiveXObject创建对象

    1. var myAddObj = new ActiveXObject("myAddObj.1");  



    myAddObj也就是在创建简单对象时填写的ProgID,这个可以在Add.rgs资源文件中查找到。

    7.      创建完对象就可以直接调用相应的函数了,如刚才实现的一个result = add(arg1,arg2)方法。

    1. var result = myAddObj.add(1,2);  
    2.   
    3. alert(result);  

    8.   将ActiveX打包CAB待续.....

  • 相关阅读:
    网络请求与远程资源
    JavaScript对象
    微信小程序抓包Charles
    归并排序
    顺序表
    后缀表达式
    中缀表达
    ES6 Promise
    Es 方法
    10.26学习
  • 原文地址:https://www.cnblogs.com/vic_lu/p/2350411.html
Copyright © 2011-2022 走看看