c++ - iTunes COM 接口(interface) - 无法将歌曲添加到资料库

标签 c++ com interface itunes

我正在尝试将一个简单的 .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
}

最佳答案

问题是您传递了 WCHAR* 而不是正确分配了 BSTRthat leads to undefined behavior .

您应该首先使用 SysAllocString() 分配一个 BSTR (不要忘记稍后释放字符串)或更好地使用包装类,如 ATL::CComBSTR_bstr_t用于管理 BSTR 生命周期。

关于c++ - iTunes COM 接口(interface) - 无法将歌曲添加到资料库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6017162/

相关文章:

c - 纯 C 中 DirectWrite 的问题

c# - 静态 C# 对象导致 : COM object that has been separated from its underlying RCW cannot be used

java - 如何设置Listner停止动画并向MainActivity Android发送回调

delphi - 为什么基于TComponent的接口(interface)实现会泄漏内存?

c++ - cout 是否需要以分号结尾?

c++ - 多久从 boost::signals::trackable 派生一次?

c++ - 当我在 office2007 中使用 CRibbonUI.InvalidateControl 或 CRibbonUI.Invalidate 时崩溃,但它在 office2013 中很好

generics - 用于处理泛型参数的 JDK 接口(interface)

c++ - 打印数组 3 行

c++ - 在MFC中的CListCtrl中更改项目中特定字符的颜色