У меня есть код 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, я получаю неопределенное значение, т.е. пустая строка
.
Любая идея, в чем здесь проблема?
Я использую Perl5, Qt4.8.4
Заранее спасибо.
если вы не можете использовать QString
возвращаемое значение, может быть, вы можете использовать std::string
,
если оба не удаются и у вас нет ограничений, вы можете сделать несколько подвохов:
QString get_string()
{
static QByteArray arr;
QString str = getString();
arr = str.toLocal8Bit();
return arr.constData();
}
обратите внимание, что arr
переменная не будет бесплатной, пока ваше приложение не запустится
редактировать: нашел возможное решение просто использовать std::string
… строковые аргументы не распознаются SWIG