php扩展如何从方法返回一个字符串?

时间:2011-09-13 11:06:14

标签: php c++ php-extension php-internals

我在[example.cc]中有一个方法:

std::string Car::accelerate (std::string n)
{
cout<<n<<endl;
return n;
}

我想从php扩展程序中调用此方法

我在[test_php.cc]扩展名中写了这个:

 char *strr=NULL;
 int strr_len;
 if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &strr, &strr_len) == FAILURE) {
        RETURN_NULL();
  }
  std::string s(strr);
RETURN_STRING(car->accelerate(s),1);

我有以下错误:

warning: deprecated conversion from string constant to ‘char*’
/home/me.cc:79: error: cannot convert ‘std::string’ to ‘const char*’ in initialization
/home/me.cc: At global scope:warning: deprecated conversion from string constant to ‘char*’

如果我用简单的调用car->accelerate(s)更改return_string(..)_;它工作..它是真的它不打印任何东西作为返回功能。需要一些帮助。欣赏

1 个答案:

答案 0 :(得分:2)

鉴于你最近的评论我会建议这是一个(未受过教育的)答案。

RETURN_STRING()在其第一个参数中加const char*。这就是你所谓的“C-String”,并且没有从std::stringconst char *的自动转换(至少对于编译器而言)。

您要做的是传递const char*作为第一个参数。要从std :: string生成const char*,请调用方法c_str()。即将您的最后一行更改为:

RETURN_STRING(car->accelerate(s) . c_str(), 1);