我需要有关将字符串列表从 C 函数发送到 TCL 调用函数的指导。在 swig 的帮助下,我能够将整数、浮点值列表从 C 函数发送回 TCL 过程以及函数返回值。但是我无法将诸如“test1”、“test2”之类的字符串列表从 swig 连同返回值一起发送回 TCL procs。任何对此的指导/指针都会很棒。
那个正在工作的代码是这样的
int addsub (int a, int b, int *result1, int *result2) {
*result1 = a + b;
*result2 = a - b;
printf("\n The value is: %i, %i \n",*result1, *result2);
return 8;
}
Swig 界面看起来像
%apply int *OUTPUT {int *result1, int *result2};
TCL Calling 就像
tclsh
% Addsub 10 5
8 15 5.
它将结果输出作为列表
但是当我尝试在字符串中做类似的事情时,TCL 中的返回列表只返回字符串中的第一个字符
代码不工作
int test_str (char *out1, char *out2) {
char *str1, *str2;
str1 = "Test1";
str2 = "Test2";
strcpy (out1,str1);
strcpy (out2,str2);
printf ("Out 1 is %s\n", out1);
printf ("Out 2 is %s\n", out2);
return 100;
}
Swig 接口文件看起来像
%apply int *OUTPUT {char *out1, char *out2};
TCL Calling 就像
Tclsh
% Teststr
Out 1 is est2
Out 2 is Test2
100 101 84
它没有给出整个字符串。给出字符串中第一个字母的 ASCII 值。
或者如果我的 C 函数是这样的
int test_str (char *out1, char *out2) {
char *str1,*str2;
str1 ="Test1";
str2 = "Test2";
out1=str1;
out2=str2;
//strcpy (out1,str1);
//strcpy (out2,str2);
printf ("String 1 is %s\n", str1);
printf ("String 2 is %s\n", str2);
printf ("Out 1 is %s\n", out1);
printf ("Out 2 is %s\n", out2);
return 100;
}
Swig 接口文件看起来像
%apply int *OUTPUT {char *out1, char *out2};
tclsh
% test_str
String 1 is Test1
String 2 is Test2
Out 1 is Test1
Out 2 is Test2
100 0 -127
有人可以指出这里缺少什么。