文字列のリストを C 関数から TCL 呼び出し関数に送信するためのガイダンスが必要です。関数の戻り値と一緒にswigを使用して、C関数からTCLプロシージャに整数、浮動小数点値のリストを送信できます。しかし、「test1」、「test2」などの文字列のリストを、swig から戻り値とともに TCL プロシージャに送り返すことができません。これに対するガイダンス/ポインタは素晴らしいでしょう。
THATが機能しているコードは次のようなものです
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通話はこんな感じ
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通話はこんな感じ
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
誰かがここに欠けているものを指摘できますか?