无法将const char [16]转换为LPCWSTR

时间:2017-05-16 01:54:48

标签: c++ winapi visual-c++

我正在尝试在后台播放.wav文件,但我收到两个错误:

  

类型“const char *”的参数与“LPCWSTR”类型的参数不兼容

和另一个错误说明:

  

'BOOL PlaySoundW(LPCWSTR,HMODULE,DWORD)':无法将参数1从'const char [16]'转换为'LPCWSTR'

我可以使用PlaySound(TEXT("Totalrecall.wav"), NULL, SND_FILENAME|SND_LOOP);播放声音,但是当我尝试在后台播放并使用PlaySound("Totalrecall.wav", NULL, SND_FILENAME|SND_LOOP|SND_ASYNC);

循环播放时出现错误

1 个答案:

答案 0 :(得分:3)

org.apache.kafka.connect.storage.StringConverter没有PlaySound()A后缀映射到WPlaySoundW(),具体取决于是否定义了PlaySoundA(),分别。 UNICODE的此变体需要PlaySound()LPCTSTR)作为输入。

const TCHAR*映射到TCHARwchar_t,具体取决于是否定义了char

UNICODE将编译时字符串/字符文字映射到TEXT() / const wchar_t[]wchar_t / const char[],具体取决于{{1}分别定义与否。

由于错误消息抱怨charUNICODE,您显然正在编译启用了Unicode的项目,其中定义了PlaySoundW条件。

但是你试图传递一个狭窄的LPCWSTR字符串文字,其中需要一个宽UNICODE字符串,因此你会遇到编译错误。

调用const char[]将始终正常编译 - 在定义wchar_t*时调用PlaySound(TEXT("Totalrecall.wav"), ...),在未定义时调用PlaySoundW(L"Totalrecall.wav", ...)

但只有在未定义UNICODE时才会调用PlaySoundA("Totalrecall.wav", ...)

话虽这么说,如果你想无条件地传递一个窄字符串,特别是如果它是一个运行时变量,直接使用PlaySound("Totalrecall.wav", ...)

UNICODE

如果要无条件地传递宽字符串,特别是如果它是运行时变量,请直接使用PlaySoundA()

PlaySoundA("Totalrecall.wav", ...)

否则,一般使用PlaySoundW() PlaySoundW(L"Totalrecall.wav", ...) (但仅限于编译时字符串文字):

TEXT()

处理字符串数据的大多数Win32 API函数和结构都以这种方式运行,提供单独的PlaySound()PlaySound(TEXT("Totalrecall.wav"), ...) 变体,并使用预处理器宏将基于A的代码映射到一个或另一个。只有过去几年推出的新API才是严格的Unicode版本,不提供ANSI变体。