4

これは私がしたことです:

DWORD dwReturn;
MCI_OPEN_PARMS mciOpenParms;
mciOpenParms.lpstrDeviceType = _T("MPEGvideo");
mciOpenParms.lpstrElementName = m_tmpFileName;

dwReturn = mciSendCommand(NULL, MCI_OPEN,
                  MCI_OPEN_TYPE | MCI_OPEN_ELEMENT,
                 (DWORD)(LPVOID) &mciOpenParms);
    if (dwReturn)
    {
        wchar_t chError[100];
        mciGetErrorString(dwReturn,chError,sizeof(chError));
        //report the error here
    }

コードを実行すると、dwReturnが266であり、chErrorが「指定されたデバイスドライバーのロード中に不明な問題」に設定されていることがわかります。何が間違っている可能性がありますか?

注:「MPEGvideo」の代わりに「mpegvideo」も試しました。それは役に立たなかった。とにかく、これらのことはどこに文書化されていますか?

4

2 に答える 2

1

MCI_OPEN_ELEMENTを指定している場合、mciOpenParms.lpstrDeviceTypeはnullである必要があります。

備考セクションを参照してください。

*(レジストリのエントリを介して)自動タイプ選択を使用するには、ファイル名とファイル拡張子をlpOpenで識別される構造のlpstrElementNameメンバーに割り当て、lpstrDeviceTypeメンバーをNULLに設定し、MCI_OPEN_ELEMENTフラグを設定します。*

于 2011-08-25T19:33:31.500 に答える
1

わたしにはできる。たぶん (おそらく) MCI レジスターがすべて台無しになっている可能性があります。または、開いているファイルが何らかの理由で破損している可能性があります。

私の知る限り、これらのデバイス名はどこにも文書化されていません。ただし、レジストリでシステムに構成されているものを見つけることができます: HKLM\Software\Microsoft\Windows NT\CurrentVersion\MCI32。私のシステムには次のものがあります。

  • AVIビデオ
  • CDオーディオ
  • MPEGビデオ
  • シーケンサー
  • WaveAudio

また、MCI が最近あまり使用されていないことを考えると、MCI はかなり標準的であると言えます。

于 2011-08-22T08:53:25.690 に答える