-1

私はネイティブの 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 コマンドと MCI sendString を使用したいと思っています)
  • ハンドルを処理できるように、外部関数 mciSendString を含める別の方法はありますか?
4

2 に答える 2

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);
}
于 2013-05-01T16:56:34.543 に答える
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. 申し訳ありませんが、私はこれを理解していません..もっとうまく説明できますか?

于 2013-05-07T14:16:25.733 に答える