我有一个C ++ API函数,由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并对其执行一些字符串操作。
答案 0 :(得分:4)
LPCSTR
与const char *
相同。
将类似C风格的字符串传递给函数调用很好。
返回指向本地函数变量的指针并不合适,因为在函数结束后该局部变量不再存在。只要您在main
中使用指针(或者在调用该函数时),它就会指向不再属于您的内存,并且该值可能已经更改。
有几种可能性,每种都有缺点:
仅使用你作为参数获得的内存(例如appNameP
,因为这必须是来自外部的东西,并且在函数结束后仍然存在)。缺点:您需要传递适合此目的的东西=>函数签名或至少参数的要求发生变化,并且您要检查/更改它的调用方式。
使用new
分配内容。缺点:在某个地方以后,在外面,delete[]
必须被召唤。
返回std::string
之类的内容。缺点:在#1中,函数签名会发生变化,您可以更改它的调用方式。
如果InstallShield本身调用此函数:
InstallShield期望您做的事情应该在文档中的某个位置。