Интерфейс iTunes COM - Невозможно добавить песню в библиотеку - PullRequest
1 голос
/ 16 мая 2011

Я пытаюсь добавить простой файл .mp3 в библиотеку iTunes, но моя программа продолжает падать, когда я вызываю AddFile (). Однако, когда я вызываю get_Tracks (), он возвращает действительный указатель, поэтому я предполагаю, что указатель на IITLibraryPlaylist действителен. Что я делаю не так?

IiTunes* p_iTunes;
IITLibraryPlaylist* p_Library;
IITOperationStatus* status;
IITTrackCollection* iTrackCollection;

CoInitialize(0);
if (FAILED(CoCreateInstance(CLSID_iTunesApp, NULL, CLSCTX_LOCAL_SERVER, IID_IiTunes, (PVOID *)&p_iTunes))){
    p_iTunes->Release();
    CoUninitialize();
}
else{
    p_iTunes->get_LibraryPlaylist(&p_Library);

    p_Library->get_Tracks(&iTrackCollection); // This works, so I suppose p_Library is valid..
    long trackCount = 0;
    iTrackCollection->get_Count(&trackCount);

    p_Library->AddFile(L"C:\\asd\asd.mp3",&status); // crashes here
}

1 Ответ

1 голос
/ 16 мая 2011

Проблема в том, что вы передаете WCHAR* вместо правильно распределенных BSTR и , что приводит к неопределенному поведению .

Сначала вы должны выделить BSTR, используя SysAllocString() (не забудьте освободить строку позже) или, что еще лучше, используйте класс-оболочку, например ATL::CComBSTR или _bstr_t для управления временем жизни BSTR.

...