具有长文件路径的 MCIWindow

MCIWindow with long file path

我在我的项目中遇到过一个场景,我正在创建一个 MCI window 来播放一些视频,其中当有一个文件路径传递给它时它无法正确播放长度超过 128 个字符。

我正在创建一个新的 MCIWindow,如下所示:

m_window = MCIWndCreate( _owner, GetModuleHandle(NULL), WS_CHILD|MCIWNDF_NOERRORDLG|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU, shortPath.c_str() );

稍后将通过执行以下操作播放它:

bool VideoMedia::play() 
{
    logStream().I() << "[VideoMedia::play] start\n";

    if ( MCIWndPlay( m_window ) != 0 )
    {
        logStream().E() << "VideoMedia::play " << "\n";
    }
    logStream().I() << "[VideoMedia::play] end\n";
    return true;
}

在我使用长度 < 128 的 shortPath 创建 m_window 的情况下,媒体显示和播放一切正常。但是,对于长度 > 128 的 shortPath,不会播放任何媒体。有趣的是,在上面的 VideoMedia::play() 函数中,日志表明 MCIWndPlay() 调用执行正常,因为没有看到 if 内部的错误日志。

我想知道这是否只是 MCIWnd 不支持长文件路径的情况,尽管我在文档中没有看到任何暗示这种情况的内容?

通过查看文档 here,它说:

NOTE: MCI device has a path-length limit of 128 characters! If your media files are buried inside the nested subfolders and the path is longer than 128 characters, your media won't play.

所以唯一真正的解决办法是确保路径不会超过它出现的 128 个字符限制。