最好谁能贴个演示代码,谢谢。
解决方案 »
- include <winioctl.h>的问题:VS2008编译通过,VC++6.0则不行
- 大家都如何管理日志文件了?
- DC问题,当前窗口非可见区域的dc如何取到?
- 如何做一个压缩包
- 一个远程视频监控的项目,大家给个方向,言者有分,总100分
- 简单问题,帮忙看看!
- 在VC下如何处理Access中的“OLE对象”?
- 如果说settimer 计时不精确的话,如何设计一个比较精确的时钟控制呢?
- vs2012中MFC Use in a Static Library无法链接lib文件
- 【求助】win10下,怎样开启和关闭美式键盘输入法,用C++ API
- 有哪些简单好用的WebService测试工具?
- 请教http中用post传送数据的格式!
以下是我自己用VC写个TCL代码执行器所用到的代码:#include "tcl.h"
Tcl_Interp *m_interp;
//初始化TCL对象指针
m_interp=Tcl_CreateInterp();
WriteLog("TCL解释器加载完成");
//注册自己的函数
Tcl_CreateCommand(m_interp, "puts",Myputs,(ClientData)NULL,(Tcl_CmdDeleteProc *)NULL);
Tcl_CreateCommand(m_interp, "setpos",MySetUpdatePos,(ClientData)NULL,(Tcl_CmdDeleteProc *)NULL);
Tcl_CreateCommand(m_interp, "SetTftpPath",MySetTftpPath,(ClientData)NULL,(Tcl_CmdDeleteProc *)NULL);
WriteLog("注册扩展函数完成");
//加载初始化程序
CString temp="Init.tcl";
if(TCL_OK!=Tcl_EvalFile(m_interp,(char*)(const char*)temp)) {
CString m_strerr;
m_strerr.Format("执行TCL出错:%s",m_interp->result);
AfxMessageBox(m_strerr);
}
WriteLog("初始化环境完成......");
它必须以一个外部文件的方式执行tcl,虽然有个cpptcl,但是它用到了boost
而我又不太想用boost你们通常怎么把tcl执行的结果返回给c++的,用全局的变量么??
Tcl_CreateCommand(m_interp, "puts",Myputs,(ClientData)NULL,(Tcl_CmdDeleteProc *)NULL);
至于返回值你可以看我上面不是自己写了个puts函数来替代TCL原有的puts函数。也就是说你在TCL中使用puts命令就会进入Myputs函数,怎么处理就看自己了。
#include <tcl.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
int main()
{
Tcl_Interp* interp;
char *p;
int tclres;
//create interpreter
interp = Tcl_CreateInterp();
/*
* Test Tcl_SetVar
*/
char *varname = "SERVICE_NAME";
char *varval = "MyServer";
p = (char *)Tcl_SetVar(interp, varname, varval, TCL_GLOBAL_ONLY);
assert ( p!=NULL && !strncmp(p, "MyServer", 8) );
/*
* Test Tcl_GetVar
*/
p = (char *)Tcl_GetVar(interp, "SERVICE_NAME", TCL_GLOBAL_ONLY);
assert ( p!=NULL && !strncmp(p, "MyServer", 8) );
/*
* Test Tcl_Eval
*/
tclres = Tcl_Eval(interp, "set CFG_val world");
assert ( tclres == TCL_OK) ;
p = (char *)Tcl_GetVar(interp, "CFG_val", TCL_GLOBAL_ONLY);
assert ( p!=NULL && !strncmp(p, "world", 5) );
/*
* Test Tcl_VarEval
*/
char *home = "./";
tclres = Tcl_VarEval(interp, "source ", home, "test.cfg", NULL) ;
assert ( tclres == TCL_OK) ;
p = (char *)Tcl_GetVar(interp, "CFG_val", TCL_GLOBAL_ONLY);
assert ( p!=NULL && !strncmp(p, "hello", 5) );
/*
* Test Tcl_EvalFile
*/
char *path = "./test.cfg";
tclres = Tcl_EvalFile(interp, path);
assert ( tclres == TCL_OK) ;
p = (char *)Tcl_GetVar(interp, "CFG_val", TCL_GLOBAL_ONLY);
assert ( p!=NULL && !strncmp(p, "hello", 5) );
//END
printf("OK\n");
}
--------------------Configuration: test12 - Win32 Debug--------------------
Linking...
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_EvalFile
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_VarEval
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_Eval
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_GetVar
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_SetVar
test12.obj : error LNK2001: unresolved external symbol __imp__Tcl_CreateInterp
Debug/test12.exe : fatal error LNK1120: 6 unresolved externals
Error executing link.exe.test12.exe - 7 error(s), 0 warning(s)