mciSendString与Visual C ++ - 参数?

时间:2013-04-25 13:42:04

标签: winapi visual-studio-2008 c++-cli

我不是本地C ++程序员,所以我需要以下方面的帮助:

我得到了这段代码:

#pragma comment(lib, "winmm.lib")

LPCWSTR openCDCommand = L"set cdaudio door open";
//comes from Windows.h, needs winmm.lib see header includes
int errCode = mciSendString(openCDCommand, 0, 0, 0);

问题:

  • 我需要使用LPCWSTR吗?为什么我没找到System :: String示例?
  • 我该如何处理'字符串连接'?我不能简单地做L“foo”+ L“baar”?
  • 我是否完全错误地使用mciSendString播放声音? (实际上我真的想使用MCI Command和MCI sendString,就像我之前在其他项目中所做的那样)
  • 还有另一种方法可以包含外部函数mciSendString,以便它可以处理句柄吗?

2 个答案:

答案 0 :(得分:1)

现在这对我有用 - 花了一些时间,但也许将来这会对其他人有所帮助:

#include "vcclr.h" // compile with /clr(!)
int Player::mciSendStringHandle(String ^ givenHandle)
{
    pin_ptr<const wchar_t> wch = PtrToStringChars(givenHandle);
    return mciSendString(wch, 0, 0, 0);
}

答案 1 :(得分:1)

  1. mciSendString的签名是

    MCIERROR mciSendString( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);

  2. 因此,关于前两个参数,在unicode中它将是一个wchar指针,在多字节中它将是一个char指针。这是签名。你不能改变它,你不应该担心。

    1. std::wstring someString( L"Foo" ); someString.append( L"bar ");

    2. 我会用核心音频API,waveOut或DirectSound播放声音。但是,不是mciSendString()

    3. 我害怕我不理解这个......你能更好地解释一下吗?