ocx手动添加方法

正常项目是可以通过ide(vc6.0、vs2013等)进行添加方法和事件的,但项目组成员有时候把工程搞坏了,即通过ide是无法自动添加了。

 

 所以只能先手动应急了。下面记录的是手动添加的过程。

-------------------------------------------------------------------------------------------------

  1. Ctrl.h和Ctrl.cpp增加对应的声明和实现如下:

    (说明:如果dispidYbInit和DISP_FUNCTION没加上,虽然对外接口有暴露[工具能看到暴露的接口],但调用时候会提示没有该方法)

    // Dispatch maps
    //{{AFX_DISPATCH(CocxCtrl)
    afx_msg short YbInit(LPCTSTR pInitInfo);
    //}}AFX_DISPATCH
    DECLARE_DISPATCH_MAP()
           
    // Dispatch and event IDs
    public:
    enum {
    //{{AFX_DISP_ID(CocxCtrl)
    dispidCheckPrinter = 1L,
       dispidYbInit = 145L,
    // Dispatch map
    BEGIN_DISPATCH_MAP(CocxCtrl, COleControl)
    //{{AFX_DISPATCH_MAP(CocxCtrl)
    DISP_FUNCTION(CocxCtrl, "YbInit", YbInit, VT_I2, VTS_BSTR)
    //}}AFX_DISPATCH_MAP
       
    short CocxCtrl::YbInit(LPCTSTR pInitInfo)
    {
    return 0;
    }
  2. 对外暴露的Ctrl.odl文件methods下按顺序递增对应方法签名

    methods:
       // NOTE - ClassWizard will maintain method information here.
       //   Use extreme caution when editing this section.
       //{{AFX_ODL_METHOD(CocxCtrl)
      [id(1)] short Check();
      [id(145)] short YbInit(LPCTSTR pInitInfo);
       //}}AFX_ODL_METHOD

    总结:至此,就可以调用上面的方法了,调用示例如下:

    function yb_init(){
    var ret = ocxctl.YbInit("");
    }
    <!--clsid : 控件成功注册到本机后,这个值在本机注册表中可以找到,页面获取控件对象就是通过这个来找的。-->  
    <OBJECT name="ocxctl" ID="ocxobject" WIDTH="0" HEIGHT="0" CLASSID="CLSID:4953D2DD-0B5F-45F1-B46C-C55C35571152" codebase="CocxCtrl.ocx"></OBJECT>  
    <p>
     <input type="button" value="初始化" onClick="yb_init()"/>
    </p>
posted @ 2022-06-09 17:44  晨光静默  阅读(197)  评论(0编辑  收藏  举报