編輯:解決方案是將LPTSTR替換爲wstring。當Windows API需要LPTSTR的wstring的是與鑄造.c_str()LPTSTR失去範圍,變通不工作(C++)
我的問題是,一個變量(LPTSTR)是走出去的範圍,我不能修復它。我會解釋...
在我的代碼中,我試圖保存一個類的圖像的名稱。我正在使用的類保存功能限制,標誌和其他需要保存的變量,例如原始文件目錄。
我使用Windows,因此,當我想要加載圖像的圖像名稱需要在一個LPTSTR(統一啓用)。我已經對Ascii到Unicode的轉換感到厭倦了。
對於我的大部分代碼,我沒有與這個類有關的問題,直到我試圖保存這個圖像名稱。第一次創建和保存圖像名稱時,名稱僅由main創建一個函數,並且可以工作!第二次我使用相同的功能創建一個新的圖像名稱,但函數調用距離主要3級。當第二個級別返回到第一個級別時,我的圖像名稱超出了範圍(該字符串被覆蓋)。
我試圖做一個工作,但3天后,沒有任何工作。
這是我爲這個類的setter設置的代碼。這是殘酷的,因爲它試圖成爲一種工作。
// 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()名稱它的作品。第二次調用setter時,If循環被輸入,但是當新的StaticString被創建時,這些值沒有被賦值。我可能會錯誤地使用「新」運算符嗎?
讓我知道如果你需要看到更多的代碼。謝謝。
我想這樣做,但是當我調用LoadImage()調用我的圖像時,函數調用將只接受LPTSTR。 Iv試圖保存爲一個字符串,然後將其轉換,但這一切都是徒勞的。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms648045%28v=vs.85%29.aspx –
@ChrisEst:閱讀最後一句。不過,你應該已經能夠將'myWstring.c_str()'傳遞給'LoadImage()'。 –
我會嘗試用wstring替換LPTSTR,我懷疑它可以與LoadImage()一起工作,但它的價值還是值得的。 –