函数 C++>Tcl 与 Critcl
Function C++>Tcl with Critcl
我想用数学函数扩展Tcl,我有一个简单的C++函数,如下所示:
double dotproduct(double vect1[3],double vect2[3])
{double res;
res=vect1[0]*vect2[0]+vect1[1]*vect2[1]+vect1[2]*vect2[2];
return res;
}
我在Wiki上搜索了一下,发现Critcl可以做到,我尝试了:
critcl::config language c++
critcl::clibraries -lstdc++
critcl::ccode {
#include <math.h>
}
critcl::cproc dotproduct {double vect1[3] double vect2[3]} double {
return vect1[0]*vect2[0]+vect1[1]*vect2[1]+vect1[2]*vect2[2];
}
但我有一个错误:
失败的critcl.tcl:在函数'int tcl_dotproduct16(ClientData,Tcl_Interp*,int,Tcl_Obj*const*(':未通过标准Tcl:4831:44:错误:无法将参数"1"的"double"转换为"double*"'双c_dotproduct16(双*,双*('
有人能帮我吗?
当涉及到类型映射时,critcl代码不是很复杂;它只是将数组降低为指向数组的指针,这对您来说不是很好,尤其是因为它没有强制参数中的元素数量。在这种情况下,你最好自己做。
请注意,我们还需要传入interp
special并返回ok
special"type"(这样我们就可以进行错误报告(,并且我们使用Tcl_Obj*
类型作为参数,这将禁用(实际上(所有类型映射。
critcl::cproc dotproduct {Tcl_Interp* interp Tcl_Obj* vect1 Tcl_Obj* vect2} ok {
int listc;
Tcl_Obj **listv;
double v1[3], v2[3];
if (Tcl_ListObjGetElements(interp, vect1, &listc, &listv) != TCL_OK)
return TCL_ERROR;
if (listc != 3)
// You probably should also do an error message here
return TCL_ERROR;
while (listc-->0)
if (Tcl_GetDoubleFromObj(interp, listv[listc], &v1[listc]) != TCL_OK)
return TCL_ERROR;
if (Tcl_ListObjGetElements(interp, vect2, &listc, &listv) != TCL_OK)
return TCL_ERROR;
if (listc != 3)
return TCL_ERROR;
while (listc-->0)
if (Tcl_GetDoubleFromObj(interp, listv[listc], &v2[listc]) != TCL_OK)
return TCL_ERROR;
double res = v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
Tcl_SetObjResult(interp, Tcl_NewDoubleObj(res));
return TCL_OK;
}
我们还需要在外部做更多的工作,因为为了能够生成错误,我们不得不禁用那里的自动映射。
相关文章:
- 如何在C++代码上使用 Tcl-C API
- 函数 C++>Tcl 与 Critcl
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- Tcl 文件事件挂在 64 位版本的 Tcl 上
- 如何将C 中的后端写入与TCL/TCK用户界面连接
- swig:std/multimap.i似乎打破了TCL包装
- TCL文件无法获取通过代码设置的环境变量
- 使用正在调用TCL脚本的CPP代码的GCC编译
- 使用 TCL 编写嵌入式 SQLite 脚本
- 协议缓冲区测试C++:期望/tcl/tk
- Vera TCL规则:列出所有本地变量
- 需要在 c++ 中从另一个文件调用 tcl proc
- 编译 TCL-DLL 包装器时出现的问题
- TCL高管的程序运行正常
- 为什么并行执行Tcl_ExprDouble的独立Tcl解释器需要互斥
- Swig:如何返回从C++到Tcl的指针列表
- C++应用程序使用TCL API启用程序包自动加载
- 改进make函数的Swig-tcl包装
- 获取在C++中实例化的TCL解释器中执行代码的行号
- Swig(Tcl):我可以在执行c++程序时调用Swig函数吗