对于致命的错误,宿主记录下dump文件是非常重要的,方便调试。

  不过出于简单,本例的宿主是用VB写的,也无法在调用前使用__try{}进行SEH捕捉。如果宿主也是C++实现的话,则尽可能捕捉dll内的异常。

  开发环境

  有别于脚本语言,C++本身是用于大型程序的开发,所以开发环境是非常完善的。

  但作为一个脚本,往往都是单个的文本文件,而不是一个项目组。任何版本的VC编辑单个cpp文件,和编辑纯文本文件几乎没有区别。因此我们事先得建立一个模板项目,将需要编辑的cpp移到此项目内开发,这样才会有下拉框智能提示等功能。

  不过既然选择它作为脚本来使用,那应该用来处理一些简单的,经常变更的逻辑事务。对于复杂的脚本程序,还不如直接写在宿主里面了。

  事实上,“程序”和“脚本”之间从没一条固定的界限。用纯粹的程序也可以写一个复杂的游戏故事情节,用纯粹的脚本也可以开发一个大型项目。只不过太过死板,或太过灵活,都会增加额外的工作量。

  总结

  与其称之为C++脚本,倒不如说是插件———可以根据需求,动态产生指令的插件。

  虽然可以玩转出一些脚本的特征,然而C++终究是门严格的语言。相比脚本的灵活性,C++固然更为严谨和死板。当然,凭借强大的宏、模版、运算符重载,我们可以充分扩展,为脚本提供丰富多样的特征和语法糖。

  当然,它的优势也是显而易见的:性能超高,交互简单。并且完全支持C++的特性。

  事实上,不仅仅是C++,任何一门高级语言都可以当“脚本”使用,只要调用它们的编译器即可。如果喜欢C#,或者Java风格,只需稍作修改可以。

  --------------------------------------------------------------------------------

  为了简单演示,本例使用VB写了个简单的宿主程序,包括基本的编译,链接,加载,语法检查功能。

  宿主提供了一个叫“Print”的接口,可以输出字符串。要实现更多接口和扩展功能,修改cl文件夹内的T.h即可。

  其中有一个DLLTmpl的工程,没有任何用处,仅仅为了生成一个.pch预编译头文件而已。如果想在脚本里使用更多的头文件,得在StdAfx.h内添加。编译之后的release/MyDll.pch复制到cl文件夹,覆盖原有的即可。