Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: mciSendString - Aufnahme schließen

  Alt 5. Mär 2007, 23:03
Also, mein "Aufnahme - Anhören - Speichern"-Code sieht so aus: Ist natürlich über 3 Button verteilt (Aufnahme, Anhören und Speichern.

Delphi-Quellcode:
  mciSendString('OPEN NEW TYPE WAVEAUDIO ALIAS meineWav',nil,0,Handle);
  mciSendString('SET meineWav ' +
                   'TIME FORMAT MS ' +
                   'BITSPERSAMPLE 16 ' +
                   'CHANNELS 2 ' +
                   'SAMPLESPERSEC 44100 ' +
                   'BYTESPERSEC 176400 ' +
                   'ALIGNMENT 4',
                   nil,0,handle);
  mciSendString('RECORD meineWav',nil,0,Handle);
  mciSendString('STOP meineWav',nil,0,Handle);
  mciSendString(PChar('SAVE meineWav "'+Filename+'"'), nil,0,Handle);
  mciSendString('CLOSE meineWav',nil,0,Handle);
  mciSendString(PChar('close ' + "'+Filename+'"'), nil, 0, 0);
Bevor ich auch nur einen mciString sende, habe ich getestet, ob die anderen Programmfunktionen funktionieren. Das ist der Fall. Öffne ich jetzt zb meineWav, nehme auf und speichere, dann bricht das Programm beim Aufruf einer anderen Form zusammen. Diese wiederum benutzt 4 Funktionen aus einer DLL, die nach dem Benutzer von mciSendString auch nicht mehr funktionieren. Das schöne daran ist, dass die 4 Funktionen genau das selbe beinhalten, wie eine andere Form aus diesem Projekt, welche ganz normal arbeitet - nur eben die DLL nicht mehr. Dabei haben die DLLs überhaupt nichts mit Ton o.Ä zu tun. Da besteht KEINERLEI Zusammenhang.

Deshalb dachte ich, dass es so sein muss. Ich lade die DLL statisch und sie belegen Speicher. Ich greife drauf zu - alles paletti. Ich öffne dann ein MCI-Gerät (mciSendString('OPEN....')) und der überschreibt(?) den belegten Speicher der DLLs. Wenn ich jetzt wieder auf die DLL zugreifen will, gibt er mir eine Zugriffsverletzung. Die eine Unit im Hauptprogramm hat aber die gleichen Funktionen, wie die DLL - funktionieren aber richtig. Vielleicht, weil dess Speicher nicht überschrieben wurde?

Ich bin jedenfalls erstmal ratlos und bitte um HILFE!!

Bye und danke
  Mit Zitat antworten Zitat