Другой способ сделать это (немного проще, но только для некоторых случаев):
я есть следующая функция
__declspec(dllexport) wchar_t* __stdcall __getJson(wchar_t * listN){
setlocale(LC_ALL, "");
//function logic
wstring ant = utf8_to_wstring(result);
const WCHAR* constRes = ant.c_str();
WCHAR* tempObj=new WCHAR[ant.length()];
wcscpy(tempObj, constRes);
thread Thread([tempObj]{
Sleep(1000);
delete[] tempObj;
});
Thread.detach();
return tempObj;
}
Эта DLL возвращаетсяwchar_t*
в MetaTrader4.
Я пробовал много способов вернуть правильное значение и избежать утечек памяти, таких как заданный тип возвратаconst wchar_t*
, создавая свой собственный класс с деструктором сdelete[]
в. Но все эти попытки оказались безуспешными: я получил'??ello'
вместо'hello'
, Просто первые один или два символа были неверны. С созданиемthread
это работает правильно. Но я хочу знать, может ли быть лучшее решение?