2012-04-03 68 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