当我向我的 DLL 发送文本并以 char*
形式接收它时,发生了一些奇怪的事情;如果文本少于 13 个字符或多于 77 个字符,则返回的文本是垃圾!
这是我的代码:-
//(1)动态链接库函数:
char* __stdcall ApplyArabicMapping( char* input)
{
// 1-Conver char* to string
std::string inputString = input;
// 2-Calling our function
string encodedStr = Encoding::arabicHandling(inputString);
// 3-Convert from String to char*
char* returnStr = (char*)encodedStr.c_str();
return (returnStr);
}
//(2) 从 C++ 控制台应用程序调用:
char* inputStr = "Some text";
char* resutls = ApplyArabicMapping(inputStr);
最佳答案
当 ApplyArabicMapping()
返回时,由于 encodedStr
被破坏,将返回悬空指针,从而导致未定义的行为。
要更正,如果可能返回一个 std::string
或使用 new
复制 char*
缓冲区并返回它: 调用者必须在不再需要时删除[]
:
char* returnStr = new char[encodedStr.length() + 1];
std::copy(encodedStr.begin(), encodedStr.end(), returnStr);
*(returnStr + encodedStr.length()) = 0; // null terminate.
关于c++ - 如何将字符串从/发送到 C++ (6.0) 到 C++ DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9991588/