C++ dll 用の php 5.2.17 拡張機能を作成しようとしています。Windows XP で Visual Studio 2005 と Sambar Server 7.0 を使用しています。2 つの質問があります。
コードに c++ のもの (文字列または STL マップ) を含めることができませんでした..「PHP は 00CF421B でアクセス違反に遭遇しました」のようなエラーが発生します。dll で文字列と STL マップを使用するにはどうすればよいですか。
文字列型の 3 つのパラメーターを持つ関数を含む c++ dll を作成しようとしており、それらの 3 つの 2 番目の文字列を返します。
以下はコードです:
PHP_FUNCTION(add){
char* a;
char* b;
char* c;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss", &a,&b,&c) == FAILURE) {
RETURN_STRING("Bad parameters!", true);
}
//string ss=a;
//ss=ss+b;
//memset(a,0,30);
//strcpy(a,ss.c_str());
//php_printf("a : %s b : %s ",a,b);
RETURN_STRING(b,1);
}
php ファイルには以下が含まれます。
$a="abc";
$b="def";
$c="ghi";
$result = add($a,$b,$c);
print "Calling add($a,$b,$c) returned $result";
-> ここで、この関数に 2 つのパラメーターが設定されている場合、最初の文字列は正常に返されます。
-> この関数の 2 つのパラメーターを含む 2 番目の文字列を返そうとすると、エラーが発生します: "PHP は 014AE07C でアクセス違反に遭遇しました"
-> 上記のコードのような 3 つのパラメーターを使用して試行すると、サンバー サーバーが自動的に閉じてしまいます。出力が表示される可能性はありません。
なぜこの奇妙な動作なのか、どこが間違っているのでしょうか?
前もって感謝します
アニル