C++ iTunes COM接口-无法将歌曲添加到库中

C++ iTunes COM接口-无法将歌曲添加到库中,c++,com,interface,itunes,C++,Com,Interface,Itunes,我正在尝试向iTunes库添加一个简单的.mp3文件,但当我调用AddFile()时,我的程序不断崩溃。但是,当我调用get_Tracks()时,它返回一个有效指针,因此我认为指向IITLibraryPlaylist的指针是有效的。我做错了什么 IiTunes* p_iTunes; IITLibraryPlaylist* p_Library; IITOperationStatus* status; IITTrackCollection* iTrackCollection; CoInitiali

我正在尝试向iTunes库添加一个简单的.mp3文件,但当我调用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
}

问题是您通过了
WCHAR*
,而不是正确分配了
BSTR


您应该首先使用分配
BSTR
(以后不要忘记释放字符串),或者最好使用类似or的包装类来管理
BSTR
生存期。

问题是您通过
WCHAR*
而不是正确分配
BSTR


您应该首先使用(以后不要忘记释放字符串)分配
BSTR
,或者最好使用类似or的包装类来管理
BSTR
生存期。

@iakovos:不客气,只是不要忘了稍后释放该字符串,否则会泄漏内存。@iakovos:不客气,只是别忘了稍后释放该字符串,否则会泄漏内存。顺便说一句,错误处理是错误的。如果
CoCreateInstance()
失败
p\u iTunes
将为空,因此调用
Release()
将使程序崩溃。顺便说一句,您的错误处理错误。如果
CoCreateInstance()
失败,iTunes将为空,因此调用
Release()
将使程序崩溃。