0

私はSWIGが初めてです。私の問題は次のとおりです。

私は C で a を返す関数を書きましたchar*

char msg[100];
strcpy(msg,"helloworld");
char* foo(){
return msg;
}

Cで実行すると、「helloworld」というメッセージが表示されます。問題は、PHPからこのメソッド(インターフェースファイルからPHPファイルにSWIGによって生成される)を次のように呼び出すときです。

$msg = foo();

$msgString(0)=""var_dumped の場合は常にあります。

これをデバッグするために、次のことも行いました。

  1. このメッセージを毎回ファイルに書き込みました。
  2. PHP から同じファイルを読み取ります。

これは機能します。しかし、直接電話してメッセージを取得したかったfoo()

私は何が欠けていますか?

4

1 に答える 1

0

msg の永続的な割り当てが必要です。それをグローバルにするか、メモリの malloc/new を実行します。その関数のローカル変数としてスタックに割り当てているだけのようです。返されるスタックへのポインターは、関数が戻るとすぐにガベージを指します。

于 2013-02-16T20:48:34.917 に答える