编辑:解决方案是将 LPTSTR 替换为 wstring。当 Windows API 需要 LPTSTR 时,使用 .c_str() 强制转换 wstring
我的问题是,一个变量(LPTSTR)超出了范围,我无法修复它。我会解释...
在我的代码中,我试图将图像的名称保存在一个类中。我使用的类保存了函数限制、标志和其他需要保存的变量,例如原始文件目录。
我使用的是 Windows,因此当我想加载图像时,图像名称需要在 LPTSTR 中(启用了 Unicode)。我已经为将 Ascii 转换为 Unicode 感到头疼。
对于我的大部分代码,我对这个类没有任何问题,直到我尝试保存这个图像名称。第一次创建和保存图像名称时,该名称仅在 main 深处的一个函数中创建,这很有效!我第二次使用相同的函数创建一个新的图像名称,但函数调用距离 main 有 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() 名称时它有效。第二次调用 setter 时进入了 If 循环,但是在创建新的 StaticString 时,没有分配值。我可能会错误地使用“新”运算符吗?
如果您需要查看更多代码,请告诉我。谢谢你。