iTunes COM 界面 - 无法将歌曲添加到资料库

iTunes COM interface - Cannot add song to library

本文关键字:添加 资料库 COM 界面 iTunes      更新时间:2023-10-16

我正在尝试将一个简单的.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:\asdasd.mp3",&status); // crashes here
}

问题是你传递WCHAR*而不是正确分配BSTR,这会导致未定义的行为。

您应该首先使用 SysAllocString() 分配BSTR(不要忘记稍后释放字符串),或者最好使用 ATL::CComBSTR_bstr_t 等包装类来管理BSTR生存期。