一步步实现OpenVXI (一) |
一.OpenVXI简介:
OpenVXI是sourceforge上的(http://sourceforge.net/projects/openvxi)一个开源项目。它的功能就是解析,分解VoiceXML文档,把VoiceXML文档中的一个个标签装换成下层的命令调用。当然,OpenVXI本身并不能执行这些命令,它只是提供了一系列抽象的调用接口。而这些接口必须由我们自己实现。因为OpenVXI不是基于特定平台的,不同的平台实现的方法也就不一样。
二.publicVoiceXML与OpenVXI
publicVoiceXML也是sourceforge(http://sourceforge.net/projects/publicvoicexml)
上的一个开源项目。如果说两者有什么不同,我想应该我们先分别看一下关于publicVoiceXML和OpenVXI的项目说明:
publicVoiceXML:
PublicVoiceXML is a VoiceXML 2.0 browser, designed to work also on low cost telephony hardware using DTMF navigation with hooks to 3rd party TTS Modules. VoIP support is under development. Tech support and sample applications available.
OpenVXI:
The Open VXI VoiceXML interpreter is a portable open source library that interprets the VoiceXML dialog markup language. It is designed to serve as a reference for parties interested in understanding how VoiceXML markup might be executed
上面的两段话大意分别是:publicVoiceXML是一个语音浏览器,有第三方的TTS模块,并且支持VoIP。 OpenVXI是一个VoiceXML标记语言的开源函数库。
如果我们打开publicVoiceXML和OpenVXI的文件包对比一下,会很容易的发现文件结构基本一样。publicVoiceXML中包括了OpenVXI的所有的东西。如果打开publicVoiceXML-2.6.1-src中的的src文件夹,然后与OpenVXI3.4的src文件夹对比一下,publicVoiceXML仅多出了一个文件夹TTS。我们很容易看出来publicVoiceXML是在OpenVXI的基础上进行的开发,而这种开发仅做了很少的工作。如果大家要是需要实现VoiceXML解析器,我推荐大家使用OpenVXI,而不推荐在publicVoiceXML上进行开发。
三.需要的准备工作
1.下载openvxi-3.4.zip。OpenVXI的源代码我推荐大家用OpenVXI3.4,不推荐大家用3.0或更低版本的,虽然网上有人说2.0的其实也很稳定。但是我觉得,一个软件不可能越做越差。OpenVXI3.4肯定要比低版本的稳定,功能更强大。
2.解压openvxi-3.4.zip后,如果没什么问题,你可以在里面找到四个文件夹doc(帮助文档),include(头文件),schema,src(OpenVXI源代码)。打开doc下的OpenVXIBuildInstructions.html。WIN32的Requirements里面有这么一句话“MSVC++ 6.0 or later - OpenVXI has been tested with Visual Studio .NET and does not require STLPort.”所以编译器推荐大家使用Visual Stdio .NET。如果用不惯.NET,VC也是可以的。不过我使用的是.NET。然后你按着要求把
Xerces 2.6.0、Spider Monkey1.5rc6a、OpenSSL0.97e、Perl5.6 下载下来,并编译好,如果嫌太麻烦,可以下载别人编译好的。还有一个STLport4.6,如果我们用的是.NET,我们不用下载。OpenVXIBuildInstructions.html上面都有链接,我就不写了。需要说明的是这几个文件的作用,Xerces是操作XML文档,Spider Monkey是对付JavaScript的,Spider Monkey后面有个1.5rc6a,我来解释一下,1.5是版本号,rc是request candidate的缩写6a应该是软件产生的序号。
四.编译OpenVXI
在OpenVXIBuildInstructions.html文档上我们可以看到,在编译OpenVXI前必须要设定环境变量。它设置环境变量的目的,是为了在编译,链接和运行的的时候可以找的第三方的头文件,库文件和动态链接库文件。我们不采用这种方式,我们采用把第三方软件加入工程的方式,即用到那个加那个,现在一个环境变量也不设。这有什么好处那?
我们继续往下看OpenVXIBuildInstructions.html。文档的意思是说按照顺序,依次执行nmake -f Makefile.NT CFG=release就可以了。顺序如下:
VXIinterfaces swichar value rd og cache inet jsi VXI VXIclient
我们也按它的顺序,只不过我们不用它的这个方式。下面逐一介绍。
1、 编译VXIinterfaces
首先进入src的VXIinterfaces目录,打开Makefile.NT,看看nmake -f Makefile.NT CFG=release命令,究竟要干什么?打开文件以后我们会看到如下内容(不包括#号后的注释,//后的是我加的解释 ):
!ifndef SWISBSDK //如果没有定义环境变量SWISBSDK提示错误
!error The environment variable SWISBSDK is not defined (it should point to your baseline directory).
!endif
all: mkalldirs headers
mkalldirs:
-mkdir $(SWISBSDK)\include//在 SWISBSDK目录下建立include文件夹
-mkdir $(SWISBSDK)\bin
-mkdir $(SWISBSDK)\lib
-mkdir $(SWISBSDK)\config
headers:
copy /y *.h $(SWISBSDK)\include
//把当前目录下的*.h文件拷到$(SWISBSDK)\include目录。
clean:
既然已经明白他要干什么,就好办了。打开Visual Stdio.NET,然后点击文件->新建->空白解决方案。解决方案名称可以这样命名:公司名+OpenVXI,工程目录可以任意选择。我的解决方案名称是myOpenVXI,工程目录在E:\work\。我们点击确定,然后进入E:\work\myOpenVXI,然后新建四个文件夹include bin lib config。并把…\src\ VXIinterfaces目录下的所有头文件拷到E:\work\myOpenVXI\include里面。这样VXIinterfaces的工作就以经完成了。
2、 编译swichar
在Visual Stdio.NET中的解决方案管理器中,右击myOpenVXI,然后选”添加”->新建项目。在对话框中选”Visual C++项目”->Win32->Win32项目,名称:swichar 位置:E:\work\myOpenVXI(这个应该是默认的),点击“确定”。右键点击swichar->属性->配置属性->常规->输出目录,把输出目录改为”..\bin”,点“确定“。然后,把src\swichar下面的genchar.c li_string.cpp misc_string.h SWIchar.def
swichar_resource.h SWIprintf.cpp SWIstring.c SWIutfconversions.c和
include文件夹,拷到E:\work\myOpenVXI\swichar目录之下。然后切换到Visual Stdio.NET,右击swichar工程,然后选“添加“->”添加现有项”,然后把上面的文件全加进工程,包括include下的。然后打开SWIchar.def文件,EXPORTS后面都是要导出的函数名称。然后,编译swichar工程,头文件如果找不到,现看看swichar的include目录下面有没有,如果有改为#include "include\*.h"。如果没有,那么肯定在目录myOpenVXI\include下面。例:#include "test.h"找不到,改为#include "..\include\test.h",如果是include目录下面的文件找不到头文件,应该改为#include "..\..\include\test.h"。
头文件的错误都改完之后,我们再次编译。遇到的第一个错误是“e:\work\myOpenVXI\swichar\SWIprintf.cpp(429): error C3861: “vsnprintf”: 即使使用参数相关的查找,也未找到标识符“。这个错误是由宏定义引起的,因为OpenVXI既可以在Windows下开发,也可以在Linix下开发。不同系统下的函数是不一样的。OpenVXI的方式是让我们自己定义宏来选择编译。以上面的为例:“e:\work\myOpenVXI\swichar\SWIprintf.cpp(429): error C3861: “ |
阅读全文(9722) | 回复(1) | 编辑 | 精华 |
回复:一步步实现OpenVXI (一) |
ye(游客)发表评论于2008/12/23 9:20:52 | ok
|
个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除 | » 1 »
|
« | August 2025 | » | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | | | | | | | |
|
Blog信息 |
blog名称: 日志总数:33 评论数量:61 留言数量:-8 访问次数:235333 建立时间:2006年4月27日 | |

|