1

我有一个由 Install Shield 通过 InstallScript 调用的 C++ API 函数:

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 并对其执行一些字符串操作。

4

1 回答 1

4

ALPCSTR与 相同const char *

将这样的 C 风格字符串传递给函数调用是可以的。

返回一个指向局部函数变量的指针是不行的,因为这个局部变量在函数结束后不再存在。一旦您在main(或调用该函数的任何位置)中使用指针,它就会指向不再属于您的内存,并且值可能已经更改。

有几种可能,每种都有缺点:

  1. 仅使用您获得的内存作为参数(例如appNameP,因为这必须是来自外部的东西,并且在函数结束后仍然存在)。缺点:您需要传递适合该目的的东西=>函数签名或至少更改参数的要求,并且您必须检查/更改它的调用方式。

  2. 用 分配东西new。缺点:稍后,在外面的某个地方,delete[]必须被调用。

  3. 返回类似std::string. 缺点:和 #1 一样,函数签名发生了变化,你必须改变它的调用方式。

如果 InstallShield 自己调用此函数:

InstallShield 期望您执行的操作应该在文档中的某处。

于 2015-05-29T21:54:46.027 回答