不能通过使用SWIG将QString从c ++函数返回到PERL函数

时间:2015-04-07 11:51:18

标签: c++ qt swig perl5

我有c ++代码(也包括Qt),我想通过使用Perl来调用这些函数。 我们可以通过使用SWIG来做到这一点,所以我已经实现了接口,并且需要在Perl脚本中使用它们。

我在c ++中有一个函数,它返回一个QString值,

QString get_string()
{
  return QString("mystring");
}

我已经编写了另外一个将在perl脚本中使用的类,其中我有一个调用此get_string()函数并返回const char *的函数。

const char* get_const_string()
{
   QString str = get_string();

 **//here I print str and str .toLocal8Bit().constData()
 //both are printing the text which i shoud get here**

   return str.toLocal8Bit().constData();

   //here I have tried diff combinations also, as 
   // return str.toStdString().c_str();
}

问题是,在get_const_string()函数中,我可以得到我想要的字符串,但是当我在perl脚本中调用此函数时,我得到的是未定义的值,即 null string

任何想法,这里有什么问题?

我使用的是perl5,Qt4.8.4

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您无法使用QString返回值,则可以使用std::string

如果两者都失败并且你没有限制,你可以做一些肮脏的伎俩:

QString get_string()
{
  static QByteArray arr;
  QString str = getString();
  arr = str.toLocal8Bit();
  return arr.constData();
}

请注意,arr变量不会是免费的,直到您的应用正在运行

编辑:找到了一个可能的解决方案,只需使用std::string ... string arguments are not recognized by SWIG