Как передать LPCSTR в функцию c ++, преобразовать в строку и вернуть LPCSTR?

У меня есть функция API C ++, которая вызывается Install Shield через InstallScript:

SQLHELPER_API LPCSTR GetAvailableAppName(LPCSTR appNameP)
{
//return "this works just fine";
std::string newAppName = "I work, maybe?";
LPCSTR returnVal = newAppName.c_str();
return returnVal;
}

Единственное, что возвращает, это пустая строка. Если я просто верну значение, переданное в переменную «appNameP», то это тоже хорошо.

Моя главная проблема заключается в том, что мне нужно передать LPCSTR и выполнить с ним некоторые строковые операции.

1

Решение

LPCSTR такой же как const char *,

Передача строки в стиле C в виде вызова функции — это нормально.

Возврат указателя на локальную переменную функции не подходит, потому что эта локальная переменная больше не существует после завершения функции. Как только вы используете указатель в main (или там, где функция была вызвана), она указывает на память, которая больше не принадлежит вам, и значение, возможно, уже изменилось.

Есть несколько возможностей, каждая из которых имеет свои недостатки:

  1. Использование только памяти, которую вы получили в качестве параметра (например, appNamePпотому что это должно быть что-то извне и все еще будет существовать после завершения функции). Недостаток: вам нужно передать что-то подходящее для этой цели => сигнатуру функции или, по крайней мере, изменить требования к параметрам, и вы должны проверить / изменить способ его вызова.

  2. Выделение чего-либо с new, Недостаток: где-то позже, снаружи, delete[] должен быть вызван.

  3. Возвращая что-то вроде std::string, Недостаток: как в # 1, сигнатура функции меняется, и вы должны изменить, как она вызывается.

Если InstallShield сам вызывает эту функцию:

То, что InstallShield ожидает от вас, должно быть где-то в документации.

4

Другие решения


По вопросам рекламы [email protected]