一. 创建MFC ActiveX项目
1. 打开VS2005新建MFC项目。这里我们取名为“ActiveXDemo”。
2. 输入项目名称为“ActiveXDemo”和项目位置。点击“确定”按钮,打开向导对话框。
3. 选择“控件设置”选项卡,具体设置可参考上图。其它选项卡为默认设置。最后点击“完成”按钮保存设置。
二. 添加控件方法
VC2005会为我们自动创建好MFC ActiveX程序框架,我们只要给该ActiveX控件添加方法即可。现在我们给控件添加一个“AddFun”方法,这个方法是将两个数相加并返回结果。
1. 点击“视图”,打开“类视图”窗口。
2. 展开“ActiveXDemoLib”项,选中“_DActiveXDemo”项。点击鼠标右键,选择“添加”下的“添加方法”。
3. 打开添加方法向导窗口。因为我们是添加一个加法方法,所以我们设置的返回类型为LONG型,方法名设为AddFun,添加两个LONG类型参数Add1,Add2。
4. 其它为默认设置,点击“完成”按钮完成添加方法。接下来我们打开“解决方案资源管理器”打开“ActiveXDemoCtrl.cpp”文件。
5. 打开代码视图,我们会发现VC2005已经为我们添加了一个“AddFun”方法,我们在方法内添加“return Add1 + Add2;”语句。
6. 最后生成项目。
三. 测试ActiveX控件
经过上面操作我们已经生成了OCX控件文件。接下来的步骤就是要将这个OCX控件嵌入在Html页面中,通过Javascript来调用控件方法来测试我们的OCX控件是否能正常运行。
1. 我们用“EditPlus”新建一个Html文件,具体内容如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ActiveX测试</title>
<script language = 'javascript'>
function AddFun()
{
var iResult = MYAvtiveX.AddFun(12, 11);//调用ActiveX控件的AddFun方法。
alert(iResult);
}
</script>
</head>
<body>
<object id="MYAvtiveX" classid="clsid: F0E7128D-E311-42F1-A0BA-88397960732E"> </object>
<fieldset>
<legend>MyActiveX测试</legend>
<table width="100%" border="1">
<tr>
<td width="20%"><input type='button' οnclick='AddFun()' value='AddFun'> </td>
</tr>
</table>
</fieldset>
</body>
</html>
上面的“classid”我们可以打开“ActiveXDemo.idl”文件获得:
2. 最终的Html页面显示效果如下,点击“AddFun”按钮,弹出计算结果提示框。
有一点需要注意的就是,有些浏览器默认禁止ActiveX,导致点击按钮AddFun 无效果,可以用IE,会提示是否允许ActiveX控件使用。
接下来调试:
可以用vs自带的工具调试:
第一步: VS2008的 需要编译\ProgramFiles\VS2008\Samples\2052\AllVCLanguageSamples\C++\MFC\ole\TstCon和TstCon\TCProps 这两个项目,改成win32 Debug,生成TstCon32.exe 。
第二部:在ActiveX工程中 属性,命令中填入TstCon32.exe目录路径。
第三部:F5调试运行Activex工程,显示TstCon32.exe界面后,右键点击空白处,选择Insert new control,添加ActiveX生成的ocx控件。
第四部:点击红色的按钮Invoke Methods,选择调用的函数,设置参数,再点击Invoke 按钮就可以进入选择的函数进行调试了。
也可以用html进行调试:
IE调试ocx:
一、设置
1.安全设置,包括本地和可信任站点的安全设置
图2 IE安全设置
2.设置成可调试状态,去掉如下图所示的两个禁用调试的勾选(好像在IE8中,无论是否勾选都可以调试)
图3 启用调试
二、
IE8调用VC6编写的DLL,断点无法进入。找了很长时间,仍然无法进入
解决方案: 关闭IE的保护模式,避免IE用多进程方式打开网页,否则调试器启动的IE进程跟网页所在的IE进程不同,就不能中断。
通过修改注册表改为多进程工作的时候,启动的IE进程和加载要调试的ocx的IE进程不是一个进程,所以不能调试
1. 点击【开始】->【运行】 命令:regedit.
2. 定位到HKEY_LOCALMACHINE -> SOFTWARE -> Microsoft -> Internet Explorer -> Main
3. 在【右边区域】【右键】新建一个名称为TabProcGrowth的DWORD值, 数值数据设置为0.
三、设置IE8为单进程模式。
运行gpedit.msc组策略管理器。在“计算机配置—》管理模板—》windows组件—》Internet Explore”中打开“选项卡进程增长”,设置为已启用,选项卡进程增长为0。应用之后IE8就进入单进程模式。点击Internet Explore后出现许多项,很难找到“选项卡进程增长”,可以随便点击一个,然后点击弹出框的“下一设置按钮”,直到找到“选项卡进程增长”,
四、设置工程:
在工程属性命令中填入ie路径 :C:\Program Files\Internet Explorer\iexplore.exe
在命令参数中填入html路径:G:\XXX\xxx.html,调用*.ocx控件的html;
现在F5调试,就能在断点中停下了。。。