パラメータを指定して呼び出す必要がある C 関数がありconst GLchar **
ます。
私は本業の 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 から一度に 1 つずつ入力します。
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); }
すべて良い。(まあ、おそらく良くないですが、うまくいきます)。「こんにちは」という単語を含む 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);
これは明らかに大量のトッシュです。コンパイルしてからセグメンテーション違反を起こします。
問題の代替コード/修正を推奨できますか?