【问题标题】:C2664 error c++ Visual StudioC2664 错误 c++ Visual Studio
【发布时间】:2014-10-04 23:16:32
【问题描述】:

我正在尝试修改旧的 MFC 程序。在 Visual Studio 2013 中打开项目后,出现以下类型的许多错误。

在 AviPlay.cpp 中

#include "stdafx.h"
#include "AviPlay.h"

#define OPEN_AVI_VIDEO "open avivideo"
BOOL initAVI()
{
    return mciSendString(OPEN_AVI_VIDEO, NULL, 0, NULL) == 0;
}

抛出的错误是错误 C2664: 'MCIERROR mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND)' : cannot convert argument 1 from 'const char [14]' to 'LPCWSTR'

是否应将 Strict 的编译器选项设置为关闭,或设置其他编译器选项来解决此错误?如果没有,我可以手动修改很多行代码。在这种情况下,在过去 15 年中可能发生了什么变化,使这样的代码以前可以,但现在不行?

提前谢谢你。

【问题讨论】:

  • 您可以尝试将项目类型设置为多字节而不是 unicode,但我不知道在使用 MFC 时这是否有效。
  • 项目可能设置为 unicode 字符集。这将导致您的程序链接到 mciSendStringW 的宽版本而不是多字节版本 mciSendStringA。
  • 在项目属性中设置为多字节,一般,字符集解决了我的问题。非常感谢!

标签: c++ visual-studio-2013 c2664


【解决方案1】:

LPCWSTR 告诉您它需要的是 wchar_t 字符串,而不是 char 字符串。默认情况下,所有 Windows API 现在都接受 wchar_t 字符串(unicode)。您可以在项目属性、常规页面、字符集中将其更改回字符字符串。将其设置为“使用多字节字符集”将使其像以前一样工作。

【讨论】:

    猜你喜欢
    • 2017-03-23
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 2018-12-04
    相关资源
    最近更新 更多