第一步 :
获取 tcl8.3 的安装包,安装到 c:\ 目录下,注意:在安装的过程中需要选择头文件和库文件。
第二步 : 利用 Visual C++ 建立一个基于对话框的工程,工程的名字为 utsample
第一步:
获取tcl8.3的安装包,安装到c:\目录下,注意:在安装的过程中需要选择头文件和库文件。
第二步:
利用Visual C++建立一个基于对话框的工程,工程的名字为utsample
第三步:
参照下图,创建utsample.h文件.
第四步:
1)把下面的代码拷贝到utsample.h中
#include "tcl.h"
#define RET_ERR false
#define RET_OK true
#define MAX_WORD_LEN 32
int GetWordFromStr(char *pStr,char *pDestStr,int iPos);
int Tcl_EXGetWord(ClientData clientData,
Tcl_Interp * interp,
int argc, char* argv[]);
int Tcl_AppInit(Tcl_Interp *interp);
2)把下面代码拷贝到utsample.cpp中
#include "stdafx.h"
#include "utsample.h"
#include "memory.h"
int main(int argc, char* argv[])
{
Tcl_Main(argc, argv,Tcl_AppInit);
return 0;
}
/*GetWordFromStr函数的扩展指令函数*/
int Tcl_EXGetWord(ClientData clientData,
Tcl_Interp * interp,
int argc, char* argv[])
{
int iPos;
bool rCode;
char pDestStr[32];
memset(pDestStr,0,32);
if(3 != argc)
{
printf("the paras number is wrong\n");
return TCL_OK;
}
if (TCL_OK != Tcl_GetInt(interp,argv[2],&iPos))
{
printf("the para 2 is wrong\n");
return TCL_OK;
}
rCode = GetWordFromStr(argv[1],pDestStr,iPos);
if(rCode == RET_OK)
{
printf("The Destine string is %s\n",pDestStr);
}
else
{
printf("It's fail to get the string!\n");
}
return TCL_OK;
}
/*tcl解释器和扩展指令的初始化函数*/
int Tcl_AppInit(Tcl_Interp *interp)
{
/*创建interp解释器可以识别的扩展指令,指令的名字是GetWord,执行该指令,直接调用Tcl_EXGetWord扩展指令函数,通过传递参数,可以执行单元测试用例*/
Tcl_CreateCommand(interp, "GetWord",
Tcl_EXGetWord, (ClientData)NULL,
(Tcl_CmdDeleteProc *)NULL);
return TCL_OK;
}
3)把被测试函数GetWordFromStr的函数体拷贝到utsample.cpp中
第五步:
添加tcl头文件和库文件,并设置相应的头文件和库文件路径
1)如下图所示,采用如下方法添加tcl83包中的tcl.h和tcl83.lib
2)在[tool…]->[Option…]->[Directory….]菜单中,设置tcl83包的头文件路径:
3)在[tool…]->[Option…]->[Directory….]菜单中,设置tcl83包的库文件路径:
第六步:
编译通过后,运行,出现控制台程序,输入GetWord “wo ai zhong guo” 3
则出现如下的结果界面
备注:
在嵌入式系统,如果不希望使用上述控制台程序的方式,可以自己构造tcl解释器,然后初始化解释器,然后利用解释器创建扩展指令,并且用自己创建的解释器运行tcl脚本。相关的代码见下面:
/*定义tcl解释器*/
Tcl_Interp* MyInterp;
/*调用tcl的内部函数,创建解释器*/
MyInterp = Tcl_CreateInterp();
/*调用tcl的内部函数,初始化tcl解释器*/
Tcl_Init(MyInterp);
//通过那嵌入集成测试框架的Tcl解释器MyInterp,运行tcl脚本E:/test.tcl
rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" );
if (TCL_OK != rCode )
{
AfxMessageBox("There are errors in your Tcl File");
}
创建扩展指令的方式参见本文前面的描述
第三步: 参照下图,创建 utsample.h 文件 .
第四步: 1 )把下面的代码拷贝到 utsample.h 中
#include "tcl.h"
#define RET_ERR false
#define RET_OK true
#define MAX_WORD_LEN 32
int GetWordFromStr(char *pStr,char *pDestStr,int iPos);
int Tcl_EXGetWord(ClientData clientData,
Tcl_Interp * interp,
int argc, char* argv[]);
int Tcl_AppInit(Tcl_Interp *interp);
2 )把下面代码拷贝到 utsample.cpp 中
#include "stdafx.h"
#include "utsample.h"
#include "memory.h"
int main(int argc, char* argv[])
{
Tcl_Main(argc, argv,Tcl_AppInit);
return 0;
}
/*GetWordFromStr 函数的扩展指令函数 */
int Tcl_EXGetWord(ClientData clientData,
Tcl_Interp * interp,
int argc, char* argv[])
{
int iPos;
bool rCode;
char pDestStr[32];
memset(pDestStr,0,32);
if(3 != argc)
{
printf("the paras number is wrong\n");
return TCL_OK;
}
if (TCL_OK != Tcl_GetInt(interp,argv[2],&iPos))
{
printf("the para 2 is wrong\n");
return TCL_OK;
}
rCode = GetWordFromStr(argv[1],pDestStr,iPos);
if(rCode == RET_OK)
{
printf("The Destine string is %s\n",pDestStr);
}
else
{
printf("It's fail to get the string!\n");
}
return TCL_OK;
}
/*tcl 解释器和扩展指令的初始化函数 */
int Tcl_AppInit(Tcl_Interp *interp)
{
/* 创建 interp 解释器可以识别的扩展指令,指令的名字是 GetWord ,执行该指令,直接调用 Tcl_EXGetWord 扩展指令函数,通过传递参数,可以执行单元测试用例 */
Tcl_CreateCommand(interp, "GetWord",
Tcl_EXGetWord,(ClientData)NULL,
(Tcl_CmdDeleteProc *)NULL);
return TCL_OK;
}
3 )把被测试函数 GetWordFromStr 的函数体拷贝到 utsample.cpp 中
第五步: 添加 tcl 头文件和库文件,并设置相应的头文件和库文件路径
1 )如下图所示,采用如下方法添加 tcl83 包中的 tcl.h 和 tcl83.lib
2 )在 [tool…]->[Option…]->[Directory….] 菜单中,设置 tcl83 包的头文件路径:
3 )在 [tool…]->[Option…]->[Directory….] 菜单中,设置 tcl83 包的库文件路径:
第六步: 编译通过后,运行,出现控制台程序,输入 GetWord “wo ai zhong guo” 3
则出现如下的结果界面
备注:
在嵌入式系统,如果不希望使用上述控制台程序的方式,可以自己构造 tcl 解释器,然后初始化解释器,然后利用解释器创建扩展指令,并且用自己创建的解释器运行 tcl 脚本。相关的代码见下面:
/* 定义 tcl 解释器 */
Tcl_Interp* MyInterp;
/* 调用 tcl 的内部函数,创建解释器 */
MyInterp = Tcl_CreateInterp();
/* 调用 tcl 的内部函数,初始化 tcl 解释器 */
Tcl_Init(MyInterp);
// 通过那嵌入集成测试框架的 Tcl 解释器 MyInterp ,运行 tcl 脚本 E:/test.tcl
rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" );
if (TCL_OK != rCode )
{
AfxMessageBox("There are errors in your Tcl File");
}
创建扩展指令的方式参见本文前面的描述