Entwickler-Ecke

Sonstiges (Delphi) - [suche] komponente zum brennen


Marlno - Do 24.07.03 18:28
Titel: [suche] komponente zum brennen
hi leute

hat jemand ne freware kompo? ich brauch mal ein wenig ansatz oder halt ne kompo um daten egal in welchem modus zum brenner zu schicken. sollte einfach zu bedienen sein....

das modul könnte auch im real modus arbeiten wäre auch gut. also entweder daten aus wählen und brennen oder halt im real modus zb real aufnehmen und dabei auf cd bannen.

wer hats oder kanns oder weiß wo. vielen dank

ps hoffe ihr versteht meine schreibweise..

thx MFG
Marlno


specialwork - Do 24.07.03 23:39
Titel: IMAPI-CD-Brenn-COM-Dienste
Hallo Marlno,

Unter Windows XP gibts es dafür bereits unterstützende COM Schnittstellen. Unter der Verwaltung des Service Control Managers (MMC -> Dienste) existiert ein Service namens IMAPI-CD-Brenn-COM-Dienst.

Beschreibung:
Zitat:
Verwaltet das Aufnehmen von CDs mit IMAPI (Image Mastering Applications Programming Interface). Auf diesem Computer können keine CDs aufgenommen werden, wenn dieser Dienst angehalten wird. Falls dieser Dienst deaktiviert wird, können die Dienste, die von diesem Dienst ausschließlich abhängig sind, nicht mehr gestartet werden.


Leider kann ich Dir dazu nicht mehr Details bieten.

Gruß, Tom


Marlno - Fr 25.07.03 00:19

hey schon mal vielen dank freut mich bzw hört sich ganz nett an.

ähm da ist jetzt nur ein problem: konkret gesagt ich habe kein XP will ich auch gar nicht....(wieso nenn ich nicht) aber wenn man genauere informationen zu diesem dienst findet (ich von jemand bekomme) dann wäre das soweit interessant wie als das mir das jemand von sich doch extrahieren könnte (ripp)

und achja das hört sich ganz nachdem "auf cd brennen wie als ob es eine festplatte sei" prinzip an. ist das eventuell nicht das ding wie es von CeQuadrat für die anderen systeme angeboten wird???? ihr wisst schon was ich meine... wenn ja wie greife ich darauf zurück????? oder muss ich dann nur in delphi folgendes tun?

quelle einlesen...........> ne kompo in delphi
auf cd laufwerk speichern <------------ von kompo schreiben

bitte um weitere infos...

danke


specialwork - Fr 25.07.03 00:27

Hallo Marlno,

Wenn Du nicht vorhast, Dein Programm zu veröffentlichen, dann kannst Du zum Beispiel die API von Nero (NeroApi.dll) direkt ansprechen. Ich bin mir allerdings nicht sicher, ob man von Ahead (Nero) die entsprechenden Funktionsheader bekommen kann.

Gruß, Tom


specialwork - Fr 25.07.03 00:34
Titel: NeroApi SDK
Hallo Marlno,

Ich hab noch mal bei Nero nachgeforscht.

Auszug aus http://www.nero.com :

Zitat:
NeroSDK (Software Development Kit)

Brennen Sie CDs oder DVDs direkt aus Ihren eigenen Anwendungen heraus mit der API von Nero!

Wenn Sie ein Programmierer oder Softwareentwickler sind, können Sie mit der integrierten Nero API (Application Programming Interface - Schnittstelle für Anwendungsprogrammierung) von Nero 5.5 Ihre eigenen Anwendungen unsere leistungsstarken CD/DVD-Brennfunktionen hinzufügen. Sie können z. B. Grafikdateien aus Grafikanwendungen heraus aufnehmen.

Fügen Sie neue Audio-Formate zu Nero, Nero Express und NeroMIX hinzu

Mit Hilfe unseres Nero Audio Plug-in Managers geben wir Ihnen die Möglichkeit, die Unterstützung neuer Audio Formate zu Nero, Nero Express und NeroMIX hinzufügen.

Um unsere API nutzen und Audio Plug-ins erstellen zu können, benötigen Sie unser NeroSDK (Software Development Kit), welches Sie hier herunterladen können.


Schauen Sie doch auch einmal im Nero SDK Forum vorbei, einfach hier klicken!
unterstützt von CDFreaks.com


Gruß, Tom


Marlno - Fr 25.07.03 00:42

nein veröffentlichen nicht wirklich höchstens an nen freund geben und an meine rechner im internen netzwerk hier im raum..


und wenn eines abhanden kommt naja dann hat man mir das geklaut...

naja jetzt zum anderen teil...
naja *lächel lach* ich denk mal nicht das man an die header aus der neroapi.dll rankommt.......
doch ich kenne eine möglichkeit nur da bekommt man nur die namen aber die functions übergabe parameter nicht... *leider heul*
wenn ich die nero.dll benutze (geile idee übrigens) dann muss ich doch auch den winASPI treiber laden muss nero ja auch oder???

special @specialwork wenn du magst können wir das ja zusammen machen..... wäre doch nett oder?

ihr anderen seid aber auch noch gefragt.

greets Marlno


Marlno - Fr 25.07.03 00:52

was? das haben die? :shock: <------is nich schock sondern eher staun
habs nie gefunden...

cool danke damit wäre eventuell das problem gelöst ich schau mir das mal an und schreibe dann ein kommen tar dazu......

wir hören uns noch DANKÄÄÄÄÄÄÄÄÄÄÄ

bye

ps eventuell mache ich eine mini Faq noch daraus und lass es einfügen


bye
MFG
Happy Marlno :D


Marlno - Fr 25.07.03 06:33

ist ja nur für c habe ich mir so gedacht........
laut beschreibung stimmt das aber ich habe im netz das hier gefunden.....


kann mir jemand dabei helfen...

bitte ist dringend...


Zitat:
Die Benutzung der Ahead Nero SDK (NeroCMD).
Sie kann unter http://www.nero.com heruntergeladen werden.
Ursprünglich wurde sie in Visual C++ geschrieben, kann aber auch in Delphi über eine parametergesteuerte EXE benutzt werden. Größter Nachteil ist, das der Benutzer eine Vollversion von Nero installiert haben muss.


was denn jetzt für eine parameter gesteuerte exe???
meinen die die blöde test.exe datei die bei den sdk dabei liegt???
ich hänge doch nicht immer irgendwelche require parameter an und brennen exterhn über ein anderes (von delphi aus geladene) dos exe datei...
was meinen die?


ShadowThief - Fr 25.07.03 10:43

die meinen, dass du mit shellexecute nem fremden programm parameter
mitgeben kannst, das dann das macht, was du willst.


Marlno - Sa 26.07.03 00:40

ja sag ich ja also praktisch ein komandozeilen prog............


ähm leute hab da noch was wichtiges falls ihr auch was zum brennen sucht zieht euch bitte nicht das worauf delphiswiss verweißt. dieses sogenante mcdb119 es ist erstens 110 und zweitens

mit viren befallen.....
daher kann ich auch jetzt erst wieder antworten ich musste meine platte formatieren...*heul* projekte konnte ich nur noch teilweise retten...

also so verlockent es auch sein mag ich sag nochmals nur noch VORSICHT

BYE
man braucht echt was anderes...


majolo - So 27.07.03 17:43

Schau mal unter: http://www.binarymagics.com/.
Leider nur eine Trialversion. Vollversion kostet ~200 $.
Ich habe die Kompo nicht ausprobiert, gibt vielleicht andere, die damit Erfahrung haben.


Marlno - So 27.07.03 18:58

erstmal danke... aber das ist das was ich in der letzten antwort meinte

das probiere ich lieber nicht nochmal aus....

habe jetzt angst das da wieder ein virus dabei ist....
zudem kann man damit leider (wenn keine viren sind) 120 oder 130 MB nur benutzen aufgrund der trial...

schade eigentlich......


ps kann nicht so ein super inteligenter von euch die c und c++ sachen in delphi umwandeln???


Marlno


majolo - So 27.07.03 21:21

Achso, ich habe den Tipp nicht von der, von die oben genannten Seite, so habe ich auch nicht auf die downloadfile geschaut. Sorry :oops: . Gibts denn nicht andere Komponenten oder einen Befehl in Delphi???


Marlno - So 27.07.03 22:31

ja ist schon ok.....
:cry:

andere komponenten ne nicht

leoder nur für c oder c++

kann jemand ein c, c++ sdk nicht für delphi umschreiben???

befehl in delphi?? denke nicht.

:cry: :cry: :cry:


UC-Chewie - So 27.07.03 23:25

Suche in der Delphi-PRAXiS NERO SDK

Schau dir mal diese Threads an, da gabs die Frage schonmal, und in einem Thread hat einer eine Header-Übersetzung verlinkt.


specialwork - Mo 28.07.03 00:48
Titel: SourceForge
Hallo Marlno,

Unter Sourceforge.Net wird bereits daraan gearbeitet.

http://sourceforge.net/projects/delphineroapi/

des Weiteren hab ich irgendwo in Skandinavien einen Link in einem Forum gefunden.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
unit UNeroAPI;

interface

uses Windows, Messages, SysUtils, Forms;

type NEROAPI_INIT_ERROR = (
   NEROAPI_INIT_OK=0,
   NEROAPI_INIT_INVALID_ARGS,
   NEROAPI_INIT_UNSPECIFIED_ERROR,
   NEROAPI_INIT_INVALID_SERIAL_NUM,
   NEROAPI_INIT_DEMOVERSION_EXPIRED,
   NEROAPI_INIT_ALREADY_INITIALISED,
   NEROAPI_INIT_CANNOT_LOCK
   );
type NERO_MEDIUM_TYPE = (
   NMT_UNKNOWN,
   NMT_CD_ROM,
   NMT_CD_RECORDABLE,
   NMT_CD_REWRITEABLE
   );

type  NERO_MEDIA_TYPE = (
   MEDIA_NONE     = $00000000,
   MEDIA_CD       = $00000001,
   MEDIA_DDCD     = $00000002,
   MEDIA_DVD_M    = $00000004,
   MEDIA_DVD_P    = $00000008,
   MEDIA_DVD_ANY  = MEDIA_DVD_M OR MEDIA_DVD_P,
   MEDIA_DVD_RAM  = $00000010,
   MEDIA_ML       = $00000020,
   MEDIA_MRW      = $00000040,
   MEDIA_NO_CDR   = $00000080,
   MEDIA_NO_CDRW  = $00000100,
   MEDIA_CDRW = MEDIA_CD OR MEDIA_NO_CDR,
   MEDIA_CDR = MEDIA_CD OR MEDIA_NO_CDRW,
   MEDIA_DVD_ROM  = $00000200,
   MEDIA_CDROM    = $00000400,
   MEDIA_NO_DVD_M_RW = $00000800,
   //NeroAPI v5.5.10.15
   MEDIA_NO_DVD_M_R  = $00001000,
   MEDIA_NO_DVD_P_RW = $00002000,
   MEDIA_NO_DVD_P_R  = $00004000,
   MEDIA_DVD_M_R = MEDIA_DVD_M OR MEDIA_NO_DVD_M_RW,
   MEDIA_DVD_M_RW = MEDIA_DVD_M OR MEDIA_NO_DVD_M_R,
   MEDIA_DVD_P_R = MEDIA_DVD_P OR MEDIA_NO_DVD_P_RW,
   MEDIA_DVD_P_RW = MEDIA_DVD_P OR MEDIA_NO_DVD_P_R,
   MEDIA_FPACKET     = $00008000,
   MEDIA_VPACKET     = $00010000,
   MEDIA_PACKETW = MEDIA_MRW OR MEDIA_FPACKET OR MEDIA_VPACKET,
   MEDIA_HDB         = $00020000
   );

type NERO_TRACK_TYPE = (
   NTT_UNKNOWN,
   NTT_DATA,
   NTT_AUDIO
   );

type NEROAPI_OPTION = (
  NEROAPI_OPTION_MSG_FILE_NAME,    // Set the language file. The value points to a string containing the file name. This adress will be kept.
  NEROAPI_OPTION_WRITE_BUFFER_SIZE  // Set write buffer size. Value points onto an integer containing the size in byte
   );

type NEROAPI_SCSI_DEVTYPE = (
   NEA_SCSI_DEVTYPE_UNKNOWN,
  NEA_SCSI_DEVTYPE_WORM,      // can write
  NEA_SCSI_DEVTYPE_CDROM,     // can only read
  NEA_SCSI_DEVTYPE_UNSUPPORTED_WORM  // can write but is not supported by NeroAPI
   );

type NERO_MEDIA_SET = DWORD;

type NERO_CAPABILITIES = (
   NSDI_ALLOWED = 1// the drive can only be used if this bit is set
   NSDI_DAO = 2,  //can write in DAO.
   NSDI_READ_CD_TEXT = 4//can read CD text
   NSDI_VARIABLE_PAUSES_IN_TAO = 8//see natPauseInBlksBeforeThisTrack below
   NSDI_DAO_WRITE_CD_TEXT = 16//writes CD text in DAO (see natArtist/Title); never supported in TAO
   NSDI_IMAGE_RECORDER =64//drive is the image recorder
   NSDI_UNDETECTED = 128,
   NSDI_IDE_BUS = 256,
   NSDI_SCSI_BUS = 512,
   NSDI_BUF_UNDERRUN_PROT = 1024//drive has a buffer underrun protection feature (not necessary Burn Proof)
   NSDI_RESERVED = 2048//Must not be used
   NSDI_RESERVED2 = 4096//Must not be used
   NSDI_ALLOW_CHANGE_BOOKTYPE = 8192 //NeroAPI >5.5.10.7: DVD recorder can change booktype of burned medium
   );

type NERO_CALLBACK = record
   ncCallbackFunction, ncUserData : Pointer;
end;

type NERO_SETTINGS = record
   nstNeroFilesPath, nstVendor, nstSoftware, nstLanguageFile : PChar;
   nstIdle, nstUserDialog : NERO_CALLBACK;
   nstEnableOverburn : LongBool;
   nstOverburnSize : DWORD;
end;

type NERO_TRACK_INFO = record
   ntiSessionNumber, ntiTrackNumber : DWORD;
   ntiTrackType : NERO_TRACK_TYPE;
   ntiTrackStartBlk, ntiTrackLengthInBlks: DWORD ;
   ntiArtist, ntiTitle : Array[0..64of char;
   ntiISRC: Array[0..12of char;
   ntiReserved: array [0..28of DWORD;
end;

type NERO_CD_INFO = record
   ncdiFreeCapacityInBlocks : DWORD;
   ncdiIsWriteable : LongBool;
   ncdiMediumType : NERO_MEDIUM_TYPE;
   ncdiArtist, ncdiTitle: array [0..64of char;
   ncdiAvailableEraseModes, ncdiUnusedBlocks: DWORD;
   ncdiMediaType : NERO_MEDIA_TYPE ;
   ncdiReserved : array [0..28of DWORD;
   ncdiNumTracks : DWORD;
   ncdiTrackInfos : array [0..0of NERO_TRACK_INFO ;
end;

type NERO_SPEED_INFOS = record
   nsiNumSupportedSpeeds, nsiBaseSpeedKBs : DWORD;
   nsiSupportedSpeedsKBs, nsiSupportedSpeeds : array[0..63of DWORD;
   nsiReserved : array[0..31of DWORD;
end;

TProc = procedure;
type NERO_SCSI_DEVICE_INFO = record
   nsdiDeviceName : array[0..63of char;
   nsdiHostAdapterName : array[0..7of char;
   nsdiHostAdapterNo, nsdiDeviceID : DWORD;
   nsdiDevType : NEROAPI_SCSI_DEVTYPE;
   nsdiDriveLetter : char;
   //nsdiCapabilities : NERO_CAPABILITIES;
   nsdiCapabilities : DWORD;
   nsdiReadSpeeds, nsdiWriteSpeeds : NERO_SPEED_INFOS;
   nsdiDriver : TProc;
   NsdiBufUnderrunProtName : Array[0..63of Char;
   nsdiMandatoryBUPSpeed : DWORD;
   nsdiMediaSupport : NERO_MEDIA_SET;
   nsdiDriveBufferSize : DWORD;
   nsdiReserved : array[0..62of DWORD;
end;

type NERO_SCSI_DEVICE_INFOS = record
   nsdisNumDevInfos : DWORD;
   // nsdisDevInfos : ^NERO_SCSI_DEVICE_INFO; ///array[0..0] of
   nsdisDevInfos : array[0..0of NERO_SCSI_DEVICE_INFO; ///
end;


type TNeroAPI = class
  private
    hndNero : THandle;
  public
    NeroSet : NERO_SETTINGS;
    constructor Create(Dir : Stringvar ErrMsg : String);
    destructor Destroy; override;
    function NeroInit(NeroSetting : NERO_SETTINGS) : String;
    procedure NeroClearErrors;
    procedure NeroDone;
    function GetAPIVersionEx(var MajHi, MajLo, MinHi, MinLo: Integer) : boolean;
    function NeroSetExpectedAPIVersionEx(MajHi, MajLo, MinHi, MinLo: Integer): Boolean;
    function NeroGetAvailableDrivesEx(
      MediaType: NERO_MEDIA_TYPE): NERO_SCSI_DEVICE_INFOS;
  published
  end;

implementation

uses
  Dialogs;

constructor TNeroApi.Create(Dir : Stringvar ErrMsg : String);
begin
   inherited Create;
   SetCurrentDir(Dir);
   ErrMsg := '';
   if FileExists('Neroapi.dll'then
   begin
      hndNero := LoadLibrary(PChar('Neroapi.dll'));
      if hndNero <> 0 then begin
         ErrMsg := NeroInit(NeroSet);
      end;
   end
   else
      errMsg := 'Error: Can''t find NeroAPI.dll';
end;

destructor TNeroAPI.Destroy;
begin
   if hndNero <> 0 then begin
      NeroDone;
      FreeLibrary(hndNero);
   end;
   inherited Destroy;
end;


function TNeroAPI.NeroInit(NeroSetting : NERO_SETTINGS) : String;
//NEROAPI_API NEROAPI_INIT_ERROR NADLL_ATTR NeroInit (const NERO_SETTINGS
//pNeroSettings, const char *reserved);
Type TF = function(const NeroSettings: NERO_SETTINGS; const Ch : Pointer) : NEROAPI_INIT_ERROR; cdecl;

var
   Rez : NEROAPI_INIT_ERROR;
   Fun : TF;
begin
   Result := '';
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroInit');
      if @fun <> nil then
      try
         Rez := Fun(NeroSetting, nil);
         Application.ProcessMessages;
         if Rez <> (NEROAPI_INIT_OK) then
         begin
            case Rez of
               NEROAPI_INIT_INVALID_ARGS :
                  Result := 'Error: NeroInit unsuccesful. Invalid arguments.';
               NEROAPI_INIT_UNSPECIFIED_ERROR :
                  Result := 'Error: NeroInit unsuccesful. Unspecified error.';
               NEROAPI_INIT_INVALID_SERIAL_NUM :
                  Result := 'Error: NeroInit unsuccesful. Invalid serial number.';
               NEROAPI_INIT_DEMOVERSION_EXPIRED :
                  Result := 'Error: NeroInit unsuccesful. Demoversion has expired.';
               NEROAPI_INIT_ALREADY_INITIALISED :
                  Result := 'Error: NeroInit unsuccesful. Nero allready initialized.';
               NEROAPI_INIT_CANNOT_LOCK :
                  Result := 'Error: NeroInit unsuccesful. Can not lock the drive.';
            else
                  Result := 'Error: NeroInit unsuccesful. Unknown error.';
            end;
            hndNero := 0;
         end
         else
            Result := 'NeroInit OK';
      except
         on E : Exception do
            Result := E.message;
      end;
   end
   else
      Result := 'Error: DLL not found!';
end;

procedure TNeroAPI.NeroClearErrors();
//NEROAPI_API void NADLL_ATTR NeroClearErrors ();
type
   TF = function : Integer;
var
   fun : TF;
begin
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroClearErrors');
      if @fun <> nil then Fun();
   end;
end;

procedure TNeroAPI.NeroDone();
//NEROAPI_API void NADLL_ATTR NeroDone ();
type TF = Function : integer;
var
   fun : TF;
begin
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroDone');
      if @fun <> nil then Fun();
   end;
end;

function TNeroAPI.GetAPIVersionEx(var MajHi, MajLo, MinHi, MinLo : Integer) : Boolean;
//NEROAPI_API BOOL NADLL_ATTR NeroGetAPIVersionEx( WORD *majhi,WORD *majlo,WORD *minhi,WORD *minlo,void *reserved);
type
   TF = function (wMajHi, wMajLo, wMinHi, wMinLo, Res : Pointer) : Boolean; cdecl;

var Fun : TF;
   wMH, wML, wMiH, wMiL : word;
begin
   Result := False;
   wMH := 0;
   wML := 0;
   wMiH := 0;
   wMiL := 0;
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroGetAPIVersionEx');
      if @fun <> nil then
      try
         Result := Fun(@wMH, @wML, @wMiH, @wMiL, nil);
         Application.ProcessMessages;
      except
         on E : Exception do
            MessageDlg(E.message, mtError, [mbOK], 0);
      end;
   end;

   MajHi := wMH;
   MajLo := wML;
   MinHi := wMiH;
   MinLo := wMiL;
end;

function TNeroAPI.NeroSetExpectedAPIVersionEx(MajHi, MajLo, MinHi, MinLo : Integer) : Boolean;
//NEROAPI_API BOOL NADLL_ATTR NeroSetExpectedAPIVersionEx(
//   WORD majhi, WORD majlo, WORD minhi, WORD minlo, void *reserved);  // Must be NULL

type
   TF = function (wMajHi, wMajLo, wMinHi, wMinLo : WORD; Res : Pointer) : Boolean; cdecl;

var Fun : TF;
   wMH, wML, wMiH, wMiL : word;
begin
   Result := False;
   wMH := MajHi;
   wML := MajLo;
   wMiH := MinHi;
   wMiL := MinLo;
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroSetExpectedAPIVersionEx');
      if @fun <> nil then
      try
         Result := Fun(wMH, wML, wMiH, wMiL, nil);
         Application.ProcessMessages;
      except
         on E : Exception do
            MessageDlg(E.message, mtError, [mbOK], 0);
      end;
   end;
end;

function TNeroAPI.NeroGetAvailableDrivesEx(MediaType : NERO_MEDIA_TYPE): NERO_SCSI_DEVICE_INFOS;
//NEROAPI_API NERO_SCSI_DEVICE_INFOS * NADLL_ATTR
//NeroGetAvailableDrivesEx(NERO_MEDIA_TYPE mediaType, void *reserved);
   //NERO_SCSI_DEVICE_INFOS; cdecl;
type
   PDevInfos = ^NERO_SCSI_DEVICE_INFOS;
   TF = function (medType : NERO_MEDIA_TYPE; Reserved : Pointer) : PDevInfos ; cdecl;

var
   Fun : TF;
   //TDevInfos : NERO_SCSI_DEVICE_INFOS;
   vDevInfos : PDevInfos;
   //DevInfos : Pointer;
begin
   if hndNero <> 0 then begin
      @Fun := GetProcAddress(hndNero, 'NeroGetAvailableDrivesEx');
      if @fun <> nil then
      try
         //Result :=
         vDevInfos := nil;
         vDevInfos := Fun(MediaType, nil);
         if vDevInfos = nil then
            Result.nsdisNumDevInfos := 0;
         //else
         //   Result := NERO_SCSI_DEVICE_INFOS(DevInfos);
         Application.ProcessMessages;
      except
         on E : Exception do
            MessageDlg(E.message, mtError, [mbOK], 0);
      end;
   end
   //else
   //   Result := -1;

end;

end.


Gruß, Tom


Marlno - Mo 28.07.03 01:48

cool
danke das ist genau das was ich suche

doch leider ist das problem
ist nur die api übersetzt und es ist noch nicht getestet

wie benutze ich das dann??
die api und das sdk
wie muss ich das verknüfen??????

danke

ps wie übersetzt man sowas eigentlich von den headern oder was das war.... bei antwort über pn würde ich mich freuen dann würd ich ne FAQ drausbasteln danke

Marlno


Marlno - Mo 28.07.03 01:51

cool danke unsere antwort zeiten haben sich wohl überschnitten :D

aber das auch nur die api von nero übersetzt oder???? deshalb bleibt meine vorherige frage wie kombinieren???



und das auf sourceforge meinst du die übersetzen die nero sdk kommplett für delphi oder was???


danke

Marlno


Cruiser23 - Sa 02.08.03 06:51

Habe jetzt nich alle Postings gelesen, aber hab das gefunden: Brennen mit Delphi [http://www.binarymagics.com]


specialwork - Sa 02.08.03 23:47
Titel: Nero API


AndyB - So 03.08.03 00:40
Titel: Re: Nero API
specialwork hat folgendes geschrieben:
Ich habe mal damit angefangen, die NeroApi SDK in Delphi umzusetzen.

Das hat ahuser und arlm doch schon längst fertig.

Zitat:
Achtung: Es ist höchstwahrscheinlich mit einigen Fehlern zu rechnen.

Delphi-Quelltext
1:
2:
3:
4:
5:
  {classes}
  TDestructorClass = class
  public
    procedure _Destroy; virtualcdecl;
  end;


Damit unterscheidest du dich bereits von der DelphiNeroAPI aus sourceforge. Die schreiben nämlich

Delphi-Quelltext
1:
procedure DestroyObject(DeleteMode: Integer = 3); virtualcdecl{ 2: stack destroy; 3: dynamic free }                    

Und ob du nun keinen Parameter oder einen Parameter übergibst, macht sicherlich einiges aus, was Schutzverletzungen betrifft.

Zitat:
Wenn Du oder irgendjemand dazu Lust haben sollte(st), die unit zu erweitern oder zu bugfixen, dann bitte ich darum, denn Quelltext hier zu posten, oder per EMail an mich zu senden.

Ich sehe keinen Sinn darin, deine Unit zu erweitern und zu bugfixen, wenn es bereits eine fix und fertige, sowie buggefixte (das ist sicherlich kein deutsches Wort) Unit von den beiden Entwicklern hier [http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/delphineroapi/DelphiNeroAPI/API/] gibt.



Marlno hat folgendes geschrieben:
doch leider ist das problem
ist nur die api übersetzt und es ist noch nicht getestet

Was willst du mehr? Willst du etwa den Quellcode von Nero 5.5 ?

Zitat:
wie benutze ich das dann??

Die beiden haben sogar schon ein Demo [http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/delphineroapi/DelphiNeroAPI/Demo/]. Das letzte mal, als ich mir das heruntergeladen habe, konnte es noch nicht brennen. Daran hat sich, wie es aussieht noch nichts geändert. Es zeigt aber, wie man mit der NeroAPI umgehen muss. Zudem gibt es die PDF Datei, die beim NeroSDK dabei ist.

Zitat:
api und das sdk
wie muss ich das verknüfen??????

API = Application Programming Interface
SDK = Software Development Kit

Die NeroAPI ist im NeroSDK enthalten, das auch noch Header-Dateien für Plugins und eine PDF Hilfe bereitstellt.


Zitat:
ps wie übersetzt man sowas eigentlich von den headern oder was das war....

Das geht nur, wenn du beide Sprachen beherrscht. Dabei reicht es, wenn du die Quell-Sprache nur lesen kannst.

So wird aus:

Delphi-Quelltext
1:
void MyFunction(int i);                    

der folgende Delphi-Code:

Delphi-Quelltext
1:
procedure MyFunction(i: Integer); cdecl;                    


Marlno - So 03.08.03 01:21

ist nicht bös gemeint aber
:shock: <---------so sehe ich gerade aus........
so auch :o

ich bin nämlich jetzt total verwundert

ich habe keine mail vom forum bekommen sondern habe einfach mal so wieder das forum durchstöbert dann habe ich mich verklickt und WOW ich lande in meinem eigenem beitrag mit riesen geiler antwort danke....

hey hast du ähm

danke ich werde sofort alles austesten....
ich hab ne frage an dich

ok scheiß auf die antwort andy hat geschrieben... habe ich zuerst übersehen wegen dem posting der api (un übersichtlichkeit kam)

ähm das ding ist hier stieg ich einiger maßen nach und bei sourceforge war vor einigen tagen noch nichts zusehen....

ja gerne wenn du den quellcode von nero 5.5 hast nehme ich den gerne *lol*
nein ist ja jetzt egal das mit der api das ding war einfach ohne eine nachvollziehbare dingens (sorry fällt mir nicht ein) war es mir unmöglich....

danke die demo schau ich mir sofort an...
und die pdf konnte ich nicht entziffern sorry
das ich nicht 100 % englisch verstehe und zudem das in c bzw c++ ist........ *grummel*

ja das was api und sdk heißt und ist weiß ich

nur das prob war das eben mit den header dateien und dem c++ schwachsinn...
und ich da leider nicht zu gutes wissen habe *schmoll*



Zitat:
Zitat:
ps wie übersetzt man sowas eigentlich von den headern oder was das war....

Das geht nur, wenn du beide Sprachen beherrscht. Dabei reicht es, wenn du die Quell-Sprache nur lesen kannst.


so danke du kannst es und du machst es für uns okay??
nein eben ich verstehe schon c++ nur halt beim umsetzen hapert es verstehst du das???? *hundeblick*

mal ganz ehrlich dich regt es etwas auf oder andy ????

aber trotzdem bedanke ich mich riesen groß an specialworker

:D


bye
MFG
Marlno


AndyB - So 03.08.03 10:39

Marlno hat folgendes geschrieben:
mal ganz ehrlich dich regt es etwas auf oder andy ????

Was soll mich da aufregen? Außer, das man das Rad nicht immer neu erfinden soll.


Marlno - So 03.08.03 18:44

ja eben schon klar......
hat sich heraus kristalisiert...

MFG
Marlno


specialwork - So 03.08.03 21:37
Titel: Stellungnahme
Hallo AndyB

Zitat:
Das hat ahuser und arlm doch schon längst fertig.


Das hält mich keineswegs davon ab, es für mich oder Andere noch mal zu tun!

Zitat:
Damit unterscheidest du dich bereits von der DelphiNeroAPI aus sourceforge


Wer sagt Dir, ob das, was die bei Sourceforge oder Andere tun, immer das Richtige ist !?. Wenn man selbst in der Lage ist, ein Problem zu lösen, dann sollte man dies auch tun. Außerdem, ist meine Version noch nicht fertiggestellt.

Zitat:
Ich sehe keinen Sinn darin, deine Unit zu erweitern und zu bugfixen, wenn es bereits eine fix und fertige, sowie buggefixte (das ist sicherlich kein deutsches Wort) Unit von den beiden Entwicklern hier gibt.


Mußt Du auch nicht, aaaaber ... dies ist ein Entwicklerforum. Das Entwicklerforum lebt davon, das Anderen geholfen wird. Ich wollte primär dem MarlNo damit helfen. Außerdem gibt es auf dem Markt unzählige unterschiedliche Programme, die letztendlich den selben Zweck erfüllen. Was haben sich die Programmierer dieser Programme nur dabei gedacht, immer wieder neue Synonymprogramme zu entwicklen ?

Bezüglich des Verbes (oder auch Tu-wort genannt) erlaube ich mir, falls es noch nicht von einem Anderen getan wurde und was nach Deiner These ja keinen Sinn machen würde, das Wort
Zitat:
bugfixen = engl(to bugfix, to fix bugs, aso.)
hiermit einzudeutschen.

Gruß, Tom

Ps.: Die Jungs und Mädels von SourceForge haben echt was drauf !


AndyB - Mo 04.08.03 01:29
Titel: Re: Stellungnahme
specialwork hat folgendes geschrieben:
Das hält mich keineswegs davon ab, es für mich oder Andere noch mal zu tun!

Ich will dich auch nicht davon abhalten, aber als Vorlage kannst du deren Arbeit doch nehmen und dort Fehler ausbessern.


Zitat:
Zitat:
Damit unterscheidest du dich bereits von der DelphiNeroAPI aus sourceforge


Wer sagt Dir, ob das, was die bei Sourceforge oder Andere tun, immer das Richtige ist !?.

In diesem speziellen Fall sagt mit das die ABI vom VC++ Compiler. Ein Destruktor für eine Klasse bekommt neben dem this Parameter auch einen weiteren Parameter mit auf den Weg, der angibt, wie der Destruktor arbeiten soll. Es gibt drei Fälle:
1: Destruktor für eine virtuelle Klasse
2. Destruktor für eine Basisklasse oder eine Stack-basierende Instanz.
3. Destruktor für letzte AbgeleiteteKlasse die Heap-basierend ist.


Zitat:
Wenn man selbst in der Lage ist, ein Problem zu lösen, dann sollte man dies auch tun.

Der Meinung bin ich auch.


Zitat:
Mußt Du auch nicht

Will ich auch nicht. 8)


Zitat:
Das Entwicklerforum lebt davon, das Anderen geholfen wird. Ich wollte primär dem MarlNo damit helfen.

Das wollte ich auch, indem ich ihm und die ein wenig Entwicklungszeit ersparen wollte. Der Lerneffekt geht dabei natürlich dahin, man kommt aber sicherlich schneller zum Ziel.


Zitat:
Außerdem gibt es auf dem Markt unzählige unterschiedliche Programme, die letztendlich den selben Zweck erfüllen. Was haben sich die Programmierer dieser Programme nur dabei gedacht, immer wieder neue Synonymprogramme zu entwicklen ?

1. Lerneffekt
2. Eigene Features
3. Eigenes Feeling


Zitat:
Ps.: Die Jungs und Mädels von SourceForge haben echt was drauf !

Dabei handelt es sich nur um freie oder berufliche (um das Wort Profi mal weg zu lassen) Programmierer, die ihre freie Zeit für OpenSource Projekte opfern. Direkt zu sourceforge gehören die nicht. (Nur mal so am Rande)