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.aspmusst 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...