我有一个需要使用const GLchar **
参数调用的C函数。
我不是交易的C程序员(Perl是我的游戏)但我试图从Perl调用C库。我已经包含了所有其他所需的功能(SWIG)。这是最后一个麻烦的问题。 请不要因为我(缺乏)C技能而向我射击。我正在尝试,如果您确切知道输入内容,Google只会提供帮助!
我理解const GLchar **
意味着它需要一个指向字符串数组(GLchar
数组)的指针。
由于无法直接创建,我必须先创建一个GLchar
数组:
GLbyte *GLbyte_array(int size) {
return (GLbyte *) malloc(sizeof(GLbyte)*size);
}
所以我在Perl中使用它:
my $var=GLbyte_array(20);
然后通过调用:
从Perl一次填充一个char
void GLbyte_put(GLbyte *a, int i, char val) {
a[i] = val;
}
再次,Perl:
my $str="hello";
for(my $i; $i<length($str); $i++)
{ GLbyte_put($var, $i); }
一切都好。 (好吧,也许不好 - 但它确实有效)。 我有一个包含单词“hello”的C char数组。
我的解决方案是尝试构建这些人的数组并将我在上面创建的数组放入其中。然后返回我所需的指针:
const GLchar **get_GLbyte_array_ptr(GLbyte *a) {
char *arr[1];
arr[0]= a;
return (const GLchar**)arr[0];
}
的Perl:
my $ptr=get_GLbyte_array_ptr($var);
这显然是tosh的负担。它编译然后是段错误。
您能为这个问题推荐替代代码/修复程序吗?
答案 0 :(得分:0)
而不是
return (const GLchar**)arr[0];
你可以试试这个:
return (const GLchar**)&arr;
答案 1 :(得分:0)
最终版看起来像这样:
const GLchar **get_GLbyte_array_ptr(GLbyte *a) {
static char *arr[1];
arr[0]= a;
return (const GLchar**)&arr;
}