2012-04-03 66 views
0

当我发送文本到我的DLL并收到它作为char*,发生了一些奇怪的事情;如果文本少于13个字符或超过77个字符,则返回的文本是垃圾!如何将字符串从/到C++(6.0)发送到C++ DLL?

这是我的代码: -

//(1)DLL功能:

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); 
+0

有你在一个调试器中运行并通过代码来看看会发生什么? – 2012-04-03 10:45:29

+3

请提供一些关于如何发送和接收文本的示例代码。 – 2012-04-03 10:45:43

回答

2

悬空指针正在被返回,因为正在被销毁,当ApplyArabicMapping()返回时,导致未定义的行为

要纠正,要么返回一个std::string如果可能的话,或使用new使char*缓冲区的副本并返回:调用者必须delete[]这个时候不再需要:

char* returnStr = new char[encodedStr.length() + 1]; 
std::copy(encodedStr.begin(), encodedStr.end(), returnStr); 
*(returnStr + encodedStr.length()) = 0; // null terminate. 
+0

非常感谢,它的工作很好。 – 2012-04-03 14:21:03