2015-04-02 3 views
0

Я столкнулся с сценарием в своем проекте, где я создаю окно MCI для воспроизведения некоторых видеороликов, в которых он не воспроизводится правильно, когда есть переданный ему путь к файлу, который больше, чем 128 символов.MCIWindow с длинным пути к файлу

Я создаю новый 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; 
} 

В том случае, когда я создаю m_window используя shortPath с длиной < 128, все отлично работает с показами и играми в средствах массовой информации. Однако, с shortPath с длиной> 128, медиа не воспроизводится. Интересно отметить, что в приведенной выше функции VideoMedia::play() журналы показывают, что вызов MCIWndPlay() выполняется отлично, поскольку журнал ошибок внутри if не отображается.

Мне интересно, если MCIWnd не может поддерживать длинный путь к файлу, хотя я не видел ничего в документации, чтобы предположить, что это так?

ответ

1

Глядя на документации 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 символов он появляется.