C++ (2012 Express) CString Issues

C++ (2012 Express) CString Issues

本文关键字:CString Issues Express 2012 C++      更新时间:2023-10-16

可能的重复:
使用VS Express

时,请在控制台应用中使用CSTRING

我对C生锈了,自上次使用它以来,似乎发生了很多变化。

我正在尝试构建VS2008中编写的程序,只有我正在使用2012 Express。因此,自然而然的错误无处不在。

列表上的第一个是CSTRING。不断成为未申报的标识符。从我拿起的东西来看,库中未包含在VS2012 Express中。所以我需要找到解决方法。到目前为止,Google给了我我无法理解的结果(如前所述,我非常生锈)。

谁能为我提供以下代码中更容易的CSTRING替代方案?谢谢!

bool Decoder::decode(LPCWSTR theCaption, TABLE_SUMMARY& table)
{
 // If the caption doesn't contain the word "You" return false
CString strCaption = theCaption;

if (-1 == strCaption.Find(L"You"))
    return false;

我不使用MFC,所以我无法确定这个建议不会以死亡的方式导致...

您需要自己编译MFC。在这里,我找到了一些详细的建议。正如我说的,我现在不能尝试。

hth

#include <cwchar>
...
if (std::wcsstr(theCaption, L"You") == 0)
    return false

为什么不使用基本CRT函数?

bool Decoder::decode(LPCWSTR theCaption, TABLE_SUMMARY& table)
{
    if (wcsstr(theCaption, L"You") == NULL)
        return false;
    ...
}

如果您需要进行案例不敏感的情况,我建议使用此WCSIST实现。

请参阅可以替换MFC或切换到STL的WTL,如果您只需要处理CSTRING,则可以使用(例如)STD :: String,添加从接口。

我认为最有趣的是cstring 自动转换为aNSI程序的LPCSTR,或lpcwstr的Unicode。

即。像

class CString : std::string {
public:
  operator PCSTR() const { return c_str(); }
  operator PCWSTR() const { return c_wstr(); }
};

可以解决您的直接问题(未经测试的代码...)

请注意,这种隐式操作员允许将cstring 直接传递到Winapi。

如果您将其与智能副本分配(在写入)中,MFC已实现(对不起,我不确定std :: string that),您会喜欢Cstring。

您将需要实现任何缺少的CSTRING成员(如果有限,应该很容易...)

当然,任何其他MFC参考都是一个不同的问题...