如何将 const char* 作为参数传递给 LPCSTR 参数?
How to pass in a const char* as an argument to an LPCSTR parameter?
我想用这个函数调用PlaySoundA函数,但是我想播放的声音文件打不开。
void AudioClass::playAudio(const char* incomingData, const char* filePath)
{
char buffer[100]; // <- danger, only storage for 100 characters.
strncpy_s(buffer, filePath, sizeof(buffer));
strncat_s(buffer, incomingData, sizeof(buffer));
PlaySoundA(buffer, NULL, SND_FILENAME);
}
据我所知,如果 PlaySoundA() 的 LPCSTR pszSound 参数的参数以字符串形式给出(例如 "C:/Users/User/Documents/sound.wav"),即给出文件的完整路径,声音将播放.
我想合并 incomingData 参数(文件名)和 filePath 参数,为此我使用了缓冲区。
如果找不到文件,应该播放默认的系统声音(在我的情况下是哔哔声),但现在不再如此;即使未设置 SND_NODEFAULT 标志,在这种情况下 PlaySoundA() 也会 return 静默,不播放默认系统声音。
https://docs.microsoft.com/en-us/previous-versions/dd743680(v%3Dvs.85)
我尝试传递的参数是否可能与 LPCSTR pszSound 参数不兼容?
虽然运行调试器,buffer变量貌似保存了整个路径(C:/Users/User/Documents/sound.wav\r\n),但是为什么会有\r\n前缀最后呢?
定义:
#define MAX_DATA_LENGTH 255
char incomingData[MAX_DATA_LENGTH];
const char* filePath {"C:/Users/User/Desktop/"};
//Arduino SerialPort object
SerialPort *arduino;
//Audio file AudioClass object
AudioClass* audio;
playAudio() 在这里调用:
void exampleReceiveData(void)
{
int readResult = arduino->SerialPort::readSerialPort(incomingData, MAX_DATA_LENGTH);
audio->AudioClass::playAudio(incomingData, filePath);
Sleep(10000);
}
EDIT_1:我使用的真实文件路径长度小于100个字符。
EDIT_2:我收到此警告:字符串 'buffer' 可能不是零终止的。
最后的\r\n
来自串口:https://www.arduino.cc/reference/en/language/functions/communication/serial/println
复制时可以跳过字符:
strncat_s(buffer, incomingData, strnlen(incomingData) - 2);
我想用这个函数调用PlaySoundA函数,但是我想播放的声音文件打不开。
void AudioClass::playAudio(const char* incomingData, const char* filePath)
{
char buffer[100]; // <- danger, only storage for 100 characters.
strncpy_s(buffer, filePath, sizeof(buffer));
strncat_s(buffer, incomingData, sizeof(buffer));
PlaySoundA(buffer, NULL, SND_FILENAME);
}
据我所知,如果 PlaySoundA() 的 LPCSTR pszSound 参数的参数以字符串形式给出(例如 "C:/Users/User/Documents/sound.wav"),即给出文件的完整路径,声音将播放.
我想合并 incomingData 参数(文件名)和 filePath 参数,为此我使用了缓冲区。
如果找不到文件,应该播放默认的系统声音(在我的情况下是哔哔声),但现在不再如此;即使未设置 SND_NODEFAULT 标志,在这种情况下 PlaySoundA() 也会 return 静默,不播放默认系统声音。
https://docs.microsoft.com/en-us/previous-versions/dd743680(v%3Dvs.85)
我尝试传递的参数是否可能与 LPCSTR pszSound 参数不兼容?
虽然运行调试器,buffer变量貌似保存了整个路径(C:/Users/User/Documents/sound.wav\r\n),但是为什么会有\r\n前缀最后呢?
定义:
#define MAX_DATA_LENGTH 255
char incomingData[MAX_DATA_LENGTH];
const char* filePath {"C:/Users/User/Desktop/"};
//Arduino SerialPort object
SerialPort *arduino;
//Audio file AudioClass object
AudioClass* audio;
playAudio() 在这里调用:
void exampleReceiveData(void)
{
int readResult = arduino->SerialPort::readSerialPort(incomingData, MAX_DATA_LENGTH);
audio->AudioClass::playAudio(incomingData, filePath);
Sleep(10000);
}
EDIT_1:我使用的真实文件路径长度小于100个字符。
EDIT_2:我收到此警告:字符串 'buffer' 可能不是零终止的。
最后的\r\n
来自串口:https://www.arduino.cc/reference/en/language/functions/communication/serial/println
复制时可以跳过字符:
strncat_s(buffer, incomingData, strnlen(incomingData) - 2);