控件调试方法

控件编译生成的是OCX文件,无法进行单步Debug调试。OCX需要运行环境,VS自带的plant调试环境不好使用,而且不好传递参数。或者说我不会用,这个方面介绍的资料十分少。我的调试方法如下:

1.  创建一个.html文件,在该文件中引用这个OCX,需要知道CLASSID,可以在.html文件中传入给OCX的参数

2.  利用regsvr32命令 安装和卸载 OCX,每次编译生成新的OCX都需要进行新的安装,然后利用IE打开上面生成的.html文件就可以运行OCX了。

Regsvr32  xx.ocx    安装控件
Regsvre32 –u xx.ocx 卸载控件
 
从页面向控件中传递参数
下面以类CUpFileActiveXCtrl进行说明,应为该类是进行参数传递的关键
功能描述:
       负责从控件嵌入页面得到参数,然后将参数传递给控件主操作界面一个Dialog对话框。
属性描述:
       CUpLoadDialog           m_uploadDialog            绘制主操作界面
       CString          m_upIp          上传IP
       CString          m_upPage      上传页面
       CString          m_upFileNameUseByForm   上传Form中file变量名
       CString          m_upParamName          上传变量名
       CString          m_upParamValue          上传变量值
       LONG            m_sigFileSize               单个文件到小
       LONG            m_tolFileSize               总文件大小
       SHORT          m_tolFileNum                     总文件个数
方法描述:
       DoPropExchange(CPropExchange* pPX)    完成从嵌入页面得到数据写入上面的属    性
       OnCreate()     完成给m_uploadDialog设置属性值,显示m_uploadDialog对话框。
       OnDraw()      调用m_uploadDialog的重绘方法完成窗口绘制。
 
1.  在UpFileActiveX.idl文件中增加
[ uuid(318F3BB1-EF8B-4D4D-82CF-F5458EDE9F0A),
  helpstring("UpFileActiveX Control 的调度接口")]
dispinterface
{
properties:
[id(24) , helpstring("属性strCurUpFolder")] BSTR strCurUpFolder;      //增加的页面属性
methods:
};
2.  在UpFileActiveXCtrl.h中增加2处
a)         调度和事件ID
// 调度和事件ID
public:
enum {
     dispidstrCurUpFolder = 24,
}
b)        增加类变量和方法
voidvoid);
CString m_strCurUpFolder;
3.  在UpFileActiveXCtrl.CPP文件的修改
a)         实现增加的方法
//无需具体的实现,保留空方法就行
voidvoid)
{
   AFX_MANAGE_STATE(AfxGetStaticModuleState());
 
   // TODO: 在此添加属性处理程序代码
 
   SetModifiedFlag();
}
b)        添加调度映射
BEGIN_DISPATCH_MAP(CUpFileActiveXCtrl, COleControl)
DISP_PROPERTY_NOTIFY_ID(CUpFileActiveXCtrl, "strCurUpFolder", dispidstrCurUpFolder, m_strCurUpFolder, OnstrCurUpFolderChanged, VT_BSTR)
END_DISPATCH_MAP()
 
c)         修改DoPropExchange函数
void CUpFileActiveXCtrl::DoPropExchange(CPropExchange* pPX){
     PX_String(pPX,_T("strCurUpFolder"),m_strCurUpFolder);            //增加这一行
}
d)        修改Dialog的创建函数
找到需要显示的Dialog创建函数,给Dialog中对应的属性设置值。
m_upfileDialog.SetCurUpFolder( this->m_strCurUpFolder );