EDIT: Решение должно было заменить LPTSTR на wstring. Когда Windows API требуется LPTSTR wstring отливают с .c_str()LPTSTR Losing Scope, работа вокруг не работает (C++)
Моя проблема, переменная (LPTSTR) выходит за рамки, и я не могу это исправить. Я объясню ...
В моем коде я пытаюсь сохранить имя изображения в классе. Класс, который я использую, сохраняет ограничения функций, флаги и другие переменные, которые необходимо сохранить, например исходный каталог файлов.
Я использую Windows, поэтому, когда я хочу загрузить изображение, имя изображения должно быть в LPTSTR (включен Unicode). Я уже болел головами о конверсиях Ascii в Unicode.
Для большей части моего кода у меня не было проблем с этим классом, пока я не попытаюсь сохранить это имя изображения. При первом создании и сохранении имени изображения имя создается только одной функцией в глубине от основной, и это работает! Во второй раз я делаю новое имя изображения с одной и той же функцией, но вызов функции - 3 уровня в глубину от основного. Когда второй уровень возвращается на первый уровень, мое имя изображения выходит за пределы области (строка переписывается).
Я пытаюсь сделать работу, но через 3 дня ничего не работает.
Вот мой код для установщика класса. Это жестоко, поскольку оно пытается работать.
// From the Limit.h
void Set_BMPName(LPTSTR S);
LPTSTR BMPName;
// From the Limit.cpp
void Limit::Set_BMPName(LPTSTR S)
{// This function should set BMPName to S.
static LPTSTR* StaticString = new LPTSTR(S);
// I used static to stop the variable from going out of scope.
if (*StaticString != S)
{ // Because StaticString is static, it wont get updated if the name is changed.
delete StaticString;
// So delete it.
static LPTSTR* StaticString = new LPTSTR(S);
// And remake it..
}
BMPName = *StaticString;
// Then set BMPName to this Static variable.
return;
};
В первый раз, когда я вызываю имя Set_BMPName(), он работает. Во второй раз, когда сеттер называется циклом If, вводится, но когда создается новая StaticString, значения не были назначены. Возможно, я ошибочно использовал «нового» оператора?
Дайте мне знать, если вам нужно больше не читать код. Спасибо.
Я хотел бы сделать это, но когда я загружу свое изображение с помощью вызова LoadImage(), вызов функции примет только LPTSTR. Iv попытался сохранить как wstring, а затем преобразовать его, но все это ни к чему. https://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx –
@ChrisEst: прочитайте окончательное предложение. Однако вы должны были бы передать 'myWstring.c_str()' в 'LoadImage()'. –
Я постараюсь заменить LPTSTR на wstring, я сомневаюсь, что он будет работать с LoadImage(), но это стоит того. –