Как отправить строку из / В C ++ (6.0) в C ++ DLL? - PullRequest
0 голосов
/ 03 апреля 2012

Когда я отправляю текст в мою DLL и получаю его как char*, происходит что-то странное;если текст меньше 13 символов или больше 77 символов, возвращаемый текст - мусор!

Вот мой код: -

// (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);

1 Ответ

2 голосов
/ 03 апреля 2012

Висячий указатель возвращается, так как encodedStr уничтожается при возврате ApplyArabicMapping(), что приводит к неопределенному поведению .

Чтобы исправить, либо верните std::string, если это возможноили создайте копию буфера char*, используя new, и верните ее: вызывающий должен delete[] это, когда больше не требуется:

char* returnStr = new char[encodedStr.length() + 1];
std::copy(encodedStr.begin(), encodedStr.end(), returnStr);
*(returnStr + encodedStr.length()) = 0; // null terminate.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...