0

我有一个需要使用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);

然后char通过调用从 Perl 一次填充一个:

   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];
   }

珀尔:

    my $ptr=get_GLbyte_array_ptr($var);

这显然是一个负担。它编译然后段错误。

你能推荐替代代码/修复这个问题吗?

4

2 回答 2

0

而不是

return (const GLchar**)arr[0];

你可以试试这个:

return (const GLchar**)&arr;
于 2012-07-11T18:40:27.787 回答
0

最终版本如下所示:

    const GLchar **get_GLbyte_array_ptr(GLbyte *a) {
    static char *arr[1];
    arr[0]= a;
    return (const GLchar**)&arr;
    }
于 2012-07-12T07:49:18.667 回答