正常项目是可以通过ide(vc6.0、vs2013等)进行添加方法和事件的,但项目组成员有时候把工程搞坏了,即通过ide是无法自动添加了。
所以只能先手动应急了。下面记录的是手动添加的过程。
-------------------------------------------------------------------------------------------------
-
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; }
-
对外暴露的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>