1

可能重复:
使用 VS Express 时在控制台应用程序中使用 CString

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

我正在尝试构建一个用 VS2008 编写的程序,但我使用的是 2012 Express。所以,很自然,错误无处不在。

列表中的第一个是 CString。不断出现作为未声明的标识符。据我所知,该库不包含在 VS2012 Express 中。所以我需要找到一个解决方法。到目前为止,谷歌给了我我无法理解的结果(如前所述,我很生疏)。

谁能在下面的代码中给我一个更简单的 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;
4

4 回答 4

0

我没有使用 MFC 已经很久了,所以我不能确定这个建议不会导致死路......

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

高温高压

于 2012-12-24T09:16:45.093 回答
0

请参阅可以替代 MFC 的WTL,或者切换到 STL,如果您只需要处理 CString,则可以使用(例如)std::string,添加接口中缺少的内容。

我认为最有趣的是 CString自动转换为 ANSI 程序的 LPCSTR 或 Unicode 的 LPCWSTR。

即类似的东西

class CString : std::string {
public:

  operator PCSTR() const { return c_str(); }
  operator PCWSTR() const { return c_wstr(); }
};

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

请注意,这种隐式运算符允许将 CString直接传递给 WINAPI。

如果您将它与智能复制分配(写入时)配对,该 MFC 实现(对不起,我不确定 std::string ),您会喜欢 CString。

您将需要实现任何缺少的 CString 成员(如果受到限制应该相当容易......)

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

于 2012-12-25T00:38:48.820 回答
0

为什么不使用基本的 CRT 功能?

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

如果您需要不区分大小写,我推荐这个wcsistr实现。

于 2012-12-24T12:09:13.613 回答
0
#include <cwchar>

...

if (std::wcsstr(theCaption, L"You") == 0)
    return false
于 2012-12-24T10:22:49.330 回答