为什么HtmlHelp函数在编译成Release时报错

html-css011

为什么HtmlHelp函数在编译成Release时报错,第1张

对照这些选项看看 Release 版错误是怎样产生的

1. Runtime Library:链接哪种运行时刻函数库通常只对程序的性能产生影响。调试版本的 Runtime Library 包含了调试信息,并采用了一些保护机制以帮助发现错误,因此性能不如发布版本。编译器提供的 Runtime Library 通常很稳定,不会造成 Release 版错误;倒是由于 Debug 的 Runtime Library 加强了对错误的检测,如堆内存分配,有时会出现 Debug 有错但 Release 正常的现象。应当指出的是,如果 Debug 有错,即使 Release 正常,程序肯定是有 Bug 的,只不过可能是 Release 版的某次运行没有表现出来而已。

2. 优化:这是造成错误的主要原因,因为关闭优化时源程序基本上是直接翻译的,而打开优化后编译器会作出一系列假设。这类错误主要有以下几种:

(1) 帧指针(Frame Pointer)省略(简称 FPO ):在函数调用过程中,所有调用信息(返回地址、参数)以及自动变量都是放在栈中的。若函数的声明与实现不同(参数、返回值、调用方式),就会产生错误 ————但 Debug 方式下,栈的访问通过 EBP 寄存器保存的地址实现,如果没有发生数组越界之类的错误(或是越界“不多”),函数通常能正常执行;Release 方式下,优化会省略 EBP 栈基址指针,这样通过一个全局指针访问栈就会造成返回地址错误是程序崩溃。C++ 的强类型特性能检查出大多数这样的错误,但如果用了强制类型转换,就不行了。你可以在 Release 版本中强制加入 /Oy- 编译选项来关掉帧指针省略,以确定是否此类错误。

如何制作《已编译的HTML帮助文件》

工具/原料

安装好Html Help Workshop

方法/步骤

安装好Html Help Workshop,需要重新启动一次才可以运行。运行后,单击菜单或工具栏中的“新建(New)”,这时出现选择新建内容的对话框。先选择“工程(Project)”,在接着出现的工程向导中指定工程放置的目录就可以了。单击“OK”后就出现工程编辑界面。在工程编辑界面的上方是3个标签栏,第一个“Project”是有关工程的编辑,第二个“Contents”是目录,第三个“Index”是索引。在工程编辑界面的左侧是7个按钮,它们的功能从上到下依次为:“改变工程选项”、“加入/删除封面文件”、“添加/修改窗口选项”、“HTMLhelp AP信息”、“浏览HTML源文件”、“保存”、“存盘并编译”。

单击“改变工程选项”按钮,出现工程选项对话框。这里仅改变标题(Title)的内容,把标题写入,编译后这个标题将出现在窗口的标题栏中。其他的内容暂时用系统的默认值。然后单击“加入/删除封面文件”按钮,再选择“加入”按钮,把作为封面页的HTML文件添上。封面页的文件一定要有,否则编译的帮助文件运行后,系统会报错。好了,简单的工程编辑就完成了。

3、单击“目录”(Contents)标签栏,这时系统请你选定一个新目录文件的名称,指定后出现目录的编辑界面。然后按照内容的需要插入标题或页面目录,并对每个目录选定相应的HTML文件。标题可以分为多级,并在标题上也放置需要的HTML文件,作为标题的说明内容,这需要按照你制作的内容统一考虑。目录的内容在编译后,单击目录可以打开相应的文件内容。插入目录后,关于目录的属性暂时也用默认值,这样基本的目录就可完成。

4、完成目录编制后,一个HTML帮助文件已具备了雏形,关于索引的内容暂时空着。保存工程文件和目录文件后就可以编译,编译的特点是把所有用到的HTML文件统统压缩后包装在一起。在主工具栏按钮中可以找到编译按钮和试运行按钮,编译后再运行就可以看看作品的面貌了。

这就是编制HTML帮助文件的基本步骤,上手很容易。但软件的功能远非这些,如在窗口定义中可以设计你所喜爱的形式,几乎所有的窗口要素都可以改变。它还支持全文检索功能,而且很容易制作。详细的内容请参考Html help Workshop的帮助文档或微软的相应网页。相信你试过以后一定会喜欢它。