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