我有一个c++ API函数,通过InstallScript安装Shield调用:
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并对其执行一些字符串操作。
A LPCSTR
与const char *
相同。
将这样的c风格字符串传递给函数调用是可以的。
返回指向局部函数变量的指针是不合适的,因为该局部变量在函数结束后不再存在。只要你在main
中使用指针(或者在函数被调用的任何地方),它就指向不再属于你的内存,并且值可能已经改变了。
有几种可能性,每种都有缺点:
-
只使用你得到的内存作为参数(例如。
appNameP
,因为这必须是外部的东西,并且在函数结束后仍然存在)。缺点:您需要传递适合该目的的东西=>函数签名或至少参数的需求更改,并且您必须检查/更改它的调用方式。 -
用
new
分配一些东西。缺点:稍后,在外面的某个地方,必须调用delete[]
。 -
返回类似
std::string
的东西。缺点:和第1条一样,函数签名发生了变化,您必须改变它的调用方式。
如果InstallShield自己调用这个函数:
InstallShield希望你做的应该在文档的某个地方。