我正在尝试在后台播放.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);
答案 0 :(得分:3)
org.apache.kafka.connect.storage.StringConverter
没有PlaySound()
或A
后缀映射到W
或PlaySoundW()
,具体取决于是否定义了PlaySoundA()
,分别。 UNICODE
的此变体需要PlaySound()
(LPCTSTR
)作为输入。
const TCHAR*
映射到TCHAR
或wchar_t
,具体取决于是否定义了char
。
UNICODE
将编译时字符串/字符文字映射到TEXT()
/ const wchar_t[]
或wchar_t
/ const char[]
,具体取决于{{1}分别定义与否。
由于错误消息抱怨char
和UNICODE
,您显然正在编译启用了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变体。