Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Fehler beim starten von MCI ! (https://www.delphipraxis.net/154558-fehler-beim-starten-von-mci.html)

thomas2009 15. Sep 2010 15:21

Fehler beim starten von MCI !
 
Hallo

ich versuche Dateien aus einer dll Datei auf die Festplatte zu speichern.
Es wird zwar eine Video Datei aus dll geholt aber leer (0 bit)
Fehlermeldung : Fehler beim Starten von MCI

das ist mein Code :
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
LibraryName, ResourceName, TempName: string;
Instance, Resource, Block, BlockSize: LongInt;
Buffer:pointer;
Stream:TMemoryStream;
begin
LibraryName:='myarchivdll.dll';
ResourceName:='test.avi';
TempName:=ExtractFilePath(ParamStr(0))+'TEMP.avi';
Instance:=LoadLibrary(pchar(LibraryName));
Resource:=FindResource(Instance, pchar(ResourceName), RT_RCDATA);
Block:=LoadResource(Instance,Resource);
BlockSize:=(SizeOfResource(Instance,Resource));
Buffer:=LockResource(Block);
Stream:=TMemoryStream.Create;
try
Stream.WriteBuffer(pointer(Buffer)^,BlockSize);
Stream.Position:=0;
Stream.SaveToFile(TempName);
finally
Stream.Free;
end;
MediaPlayer1.FileName:=TempName;
MediaPlayer1.Display:=Panel1;
MediaPlayer1.Open;
MediaPlayer1.Play;
end;

shmia 15. Sep 2010 17:37

AW: Fehler beim starten von MCI !
 
Du hast ja keinerlei Fehlerprüfungen in deinem Code!
Man muss ja mindestens mal abfragen, ob der Ergebnis von LoadLibrary in Ordnung ist.

Und noch fünf Hinweise:
* Besser die DLL so laden:
Delphi-Quellcode:
Instance:=LoadLibraryEx(pchar(LibraryName),0,LOAD_LIBRARY_AS_DATAFILE);
if Instance = 0 then raise Exception.CreateFmt('%s kann nicht geladen werden', [LibraryName]);
* nicht vergessen, die DLL mit FreeLibrary freizugeben
* Mit der Klasse TResourcestream kommst du einfacher an die Daten ran.
* Im Programmverzeichnis hat man häufig keine Schreibrechte. Die AVI-Datei gehört ins TEMP-Verzeichnis
* Trenne das Entpacken der Video-Datei von dem Abspielen der Daten. Mit zwei Funktionen mit entsprechenden Übergabeparametern wird's besser.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz