LPTSTR丢失范围,无法正常工作(C ++)

时间:2015-05-28 16:43:52

标签: c++ scope setter lptstr

编辑:解决方案是将LPTSTR替换为wstring。当Windows API需要LPTSTR时,wstring将使用.c_str()

进行转换

我的问题是,变量(LPTSTR)超出了范围,我无法修复它。我会解释......

在我的代码中,我试图在类中保存图像的名称。我正在使用的类保存了需要保存的函数限制,标志和其他变量,例如原始文件目录。

我正在使用Windows,因此当我想加载图像时,图像名称需要位于LPTSTR中(启用了Unicode)。我已经对Ascii到Unicode的转换感到头疼。

对于我的大多数代码,我都没有遇到过这个类的问题,直到我尝试保存此图像名称。第一次创建和保存图像名称时,名称只在main中创建一个函数,这样可行!我第二次使用相同的函数创建一个新的图像名称,但函数调用是从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时,未分配值。我可能错误地使用“新”操作符吗?

如果您需要查看更多代码,请告诉我们。谢谢。

1 个答案:

答案 0 :(得分:2)

请参阅,这是Microsoft给出指针类型名称看起来不像指针的问题。

  

L ong p ointer to T CHAR str ing source)功能

您的LPTSTR实际上包含字符串;就像char*(或wchar_t*)一样,它只是指向一个。您可以随心所欲地使用指针的生命周期,但这不会对实际数据做任何事情。当然,动态分配指针(虽然是创造性的尝试)不会有帮助。

为什么不使用std::string(或std::wstring)等适当的C ++技术呢?那么你将在三分钟内完成,而不是三天。 : - )

如果确实卡在LPTSTR之后,请使用专用于将数据复制到另一个数据的Windows API函数:StringCchCopy