Brenn - API



  • Also ... brauch für ein momentanes Projekt von mir eine CD-Brenn-API ... hab mal kurz gesucht und die NeroAPI und die IMAPI gefunden. Für NeroAPI muss man eine rel. teure Lizenz von Ahead kaufen, damit das ohne Nero geht und man es in kommerziellen Projekten einsetzen darf und IMAPI ist nicht so das wahre ... letzteres kann aber auch an mir liegen und wenn mir jemand ein gutes Beispiel zeigt, dass das Gegenteil beweißt, bin ich dafür gerne offen.
    Kennt denn jemand noch eine andere lib die elementare Brennfunktionen bereitstellt?

    Thx Deviloper



  • Naja, nicht ganz einfach, aber gehen tut es schon...
    http://www.codeproject.com/win32/CD_Burner.asp

    musst Dich halt ein wenig mit IStorage auseinandersetzen...





  • Das Beispiel kannte ich schon ... find die Implementierung nur nicht sonderlich sauber ... naja werde nochmal gucken. Trotzdem danke.



  • Hmm hab mir mal das IDiskMaster Interface gewrappt ... jetzt wird das Objekt aber nicht korrekt initialisiert. Bzw. der 1. Funktionsaufruf schlägt direkt fehl. Warum?

    #if !defined(DISC_MASTER_H__INCLUDED)
    #define DISC_MASTER_H__INCLUDED
    
    #if (_MSC_VER > 1000)
    #pragma once
    #endif // _MSC_VER > 1000
    
    class DiscMaster : public CComQIPtr<IDiscMaster>
    {
    public:
    	DiscMaster()		{	ASSERT(SUCCEEDED(CoCreateInstance(CLSID_MSDiscMasterObj, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER)));	}
    	~DiscMaster()		{	close(); progress_unadvise();		}
    
    public:
    	bool				open()															{	return SUCCEEDED((*this)->Open());					}
    	bool				close()															{	return SUCCEEDED((*this)->Close());					}
    	bool				record_disc(const bool sim = false, const bool eject = true)	{	return SUCCEEDED((*this)->RecordDisc(sim, eject));	}
    	bool				clear_data()													{	return SUCCEEDED((*this)->ClearFormatContent());	}
    	bool				progress_advise(IDiscMasterProgressEvents* pEvents)				{	return SUCCEEDED((*this)->ProgressAdvise(pEvents, &m_nProgressID));	}
    	bool				progress_advise(IDiscMasterProgressEvents* pEvents, UINT_PTR* id)	{	return SUCCEEDED((*this)->ProgressAdvise(pEvents, id));		}
    	bool				progress_unadvise()												{	return SUCCEEDED((*this)->ProgressUnadvise(m_nProgressID));	}
    	bool				progress_unadvise(const UINT_PTR id)							{	return SUCCEEDED((*this)->ProgressUnadvise(id));	}
    
    public:
    	bool				set_active_rec(IDiscRecorder* pRecorder)						{	return SUCCEEDED((*this)->SetActiveDiscRecorder(pRecorder));	}
    	bool				get_active_rec(IDiscRecorder* pRecorder)						{	return SUCCEEDED((*this)->GetActiveDiscRecorder(&pRecorder));	}
    
    public:
    	bool				enum_disc_rec(IEnumDiscRecorders* pEnum)						{	return SUCCEEDED((*this)->EnumDiscRecorders(&pEnum));	}
    
    public:
    	enum format 
    	{
    		F_AUDIO = 0,
    		F_DATA,
    		F_NONE
    	};
    
    	bool				format_supported(const format& form)										
    	{	
    		if (form == F_NONE)
    			return true;
    
    		IID		formats[2];  
    		ULONG	tmp = 0;
    		CComPtr<IEnumDiscMasterFormats> it;
    		if (!SUCCEEDED((*this)->EnumDiscMasterFormats(&it)))
    			return false;
    
    		if (!SUCCEEDED(it->Next(2, formats, &tmp)))
    			return false;
    
    		IID		act = (form == F_AUDIO ? IID_IRedbookDiscMaster : IID_IJolietDiscMaster);
    		return (tmp == 2 ? (formats[0] == act || formats[1] == act) : (tmp == 1 ? (formats[0] == act) : false));
    	}	
    
    	format				get_active_format()
    	{
    		IID iid = IID_NULL;
    		if (!SUCCEEDED((*this)->GetActiveDiscMasterFormat(&iid)))
    			return F_NONE;
    
    		return (iid == IID_IRedbookDiscMaster ? F_AUDIO : (iid == IID_IJolietDiscMaster ? F_DATA : F_NONE));
    	}
    
    	bool				set_active_format(const format& form, void** pUnknown)
    	{
    		if (F_NONE == form)
    			return false;
    
    		return SUCCEEDED((*this)->SetActiveDiscMasterFormat((form == F_AUDIO ? IID_IRedbookDiscMaster : IID_IJolietDiscMaster), pUnknown));
    	}
    
    private:
    	UINT_PTR	m_nProgressID;
    };
    
    #endif // DISC_MASTER_H__INCLUDED
    

    ...


Anmelden zum Antworten