• 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>
  • 相关阅读:
    Tomcat服务器原理详解
    junit入门
    lombok
    java 运行指定类的main函数
    席位分配问题——惯例Q值法和d&#39;hondt法的MATLAB程序
    5.2 calendar--通用日期的相关函数(3)
    [笔记]软件体系结构(1)--模式初印象
    hdu 1003
    linux虚拟机上挂载U盘
    Android中Java与web通信
  • 原文地址:https://www.cnblogs.com/zhangmo/p/16360206.html
Copyright © 2020-2023  润新知