Autor |
Beitrag |
famelor
Hält's aus hier
Beiträge: 9
|
Verfasst: Mi 02.02.05 23:35
Da so etwas ja leider nicht zu den Standardfunktionen bei InnoSetup gehört, habe ich mir gedacht, es müsste doch bestimmt möglich sein, über PascalScript, welches in die Inno-Dateien eingebunden werden kann, einen Sound abzuspielen.
Den Befehl PlaySound kennt er aber anscheinend nicht ("Unknown identifier").
Ich suche daher irgendeine Möglichkeit, irgendwelche Soundformate abzuspielen. Die Boardsuche hat mich auch nicht wirklich weiter gebracht.
Für jede Hilfe bin ich dankbar!
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 02.02.05 23:40
Du könntest dir ein Programm oder eine DLL mit den gewünschten Funktionen schreiben und die dann beim Start des Setup aufrufen.
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Do 03.02.05 00:14
Soweit ich weiß, kann ich mit Inno keine Programme direkt beim Starten ausführen, erst nach der Installation.
Aber zu der DLL: Ich habe FMOD ( www.fmod.org/) gefunden. Kann ich das verwenden? Die DLL müsste ich mittels Pascal Script einbinden können. Nur irgendwie blick ich in der Dokumentation nicht ganz durch, welche Befehle ich jetzt brauche, um einfach z.B. eine midi-Datei abzuspielen. Wäre super, wenn du mir ein paar Tipps geben könntest 
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 03.02.05 00:51
Natürlich kannst du direkt beim Start des Setup auch was anderes ausführen. Dazu hast du doch die Installer-Ereignisse wie "InitializeSetup" oder "InitializeWizard". In dem Fall würde ich zu einer DLL tendieren, deren Abspielfunktion du beim Start des Setups aufrufst. Es ginge auch, dass du die Musik erst dann dudeln lässt, wenn man die Willkommensseite weggeklickt hat. Oder (falls die Installation an sich lange dauert) dass du die Musik erst spielst, wenn tatsächlich das Kopieren der Dateien usw. beginnt.
Was diese DLL angeht, kann ich dir nicht helfen. Oder sagen wir: noch nicht. Wenn man sie bspw. in Delphi oder C einbinden und nutzen kann, dann wird es auch in Inno Setup gehen, schätze ich. Aber dazu müsste ich selbst erst mal die Befehle dieser DLL kennen, speziell die, die man zum Abspielen braucht.
Wenn da jemand mit den notwendigen Aufrufen aushelfen kann, dann könnten wir uns Gedanken um die Einbindung in Inno Setup machen. 
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 05.02.05 16:25
Titel: Probleme beim Einbinden einer DLL in Inno Setup
Erstmal danke für deine Antworten.
Ich hab jetzt die FMOD-Dokumentation durchstöbert und hab folgende Funktion zum Initialisieren gefunden:
Zitat: |
//FSOUND_Init
//Initializes the FMOD Sound System.
signed char F_API FSOUND_Init(
int mixrate,
int maxsoftwarechannels,
unsigned int flags
);
|
Diese habe ich versucht, folgendermaßen in Inno Setup einzubinden:
Quelltext 1: 2:
| [Files] Source: fmod.dll; Flags: dontcopy |
und
Quelltext 1: 2: 3:
| [ Code] //function fs_init(mixrate: Integer; channels: Integer; flags: Cardinal): Shortint; //external 'FSOUND_Init@fmod.dll stdcall'; |
Leider bekomme ich beim Ausführen immer die Meldung
Zitat: |
Runtime Error (at -1:0):
Cannot import dll:fmod.dll.
|
Also irgendwas mach ich beim Einbinden der DLL falsch, hab aber leider keine Ahnung, was  Habs auch schon mit einer kleinen selbstgeschriebenen DLL versucht und dieselbe Fehlermeldung bekommen 
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 16:27
Gib mal noch "files:" davor an, damit das Setup weiß, dass es auf die DLL in der [Files]-Sektion zugreifen soll.
Edit: Vor dem Dateinamen "fmod.dll" meine ich!
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 05.02.05 16:36
Sorry, wo genau meinst du?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 16:55
Na vor dem Dateinamen und nach dem @
Quelltext 1:
| external 'FSOUND_Init@files:fmod.dll stdcall' |
Ich habe allerdings meine Zweifel. Ich habe mal in die Delphi-Unit reingeguckt, die man für diese DLL braucht. Und die Funktion "FSOUND_Init" ist dort bspw. so exportiert:
Quelltext
Wenn mir einer mal erklären könnte, was das @12 bedeutet.  Durch das @ wird das nämlich nichts mit dem Einbinden in Inno, weil dort selbst das @ verlangt wird.
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 05.02.05 17:05
hmm, also jetzt bekomm ich die gleiche Fehlermeldung, nur mit nem anderen Pfad:
C:\Dokuemente u. Einstellungen\User\..\Temporäres Verzeichnis\
Dort speichert er die DLL auch rein, aber importiert werden kann sie leider trotzdem nicht.
Stimmen denn meine Datentypen?
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 17:09
Hörst du mir nicht zu? Das Problem liegt nicht an der DLL sondern an den echten Funktionsnamen, so wie sie aus der DLL kommen. Wenn du es mit deiner eigenen DLL probierst, müsste es jetzt klappen.
Weil die FMOD-Funktionen alle selbst das @ im Namen haben, klappt der Import in Inno nicht. Alternative: Du schreibst deine eigene kleine DLL mit vernünftigen Namen und benutzt die dann zum Aufrufen der FMOD-Funktionen. 
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 05.02.05 17:32
achso entschuldigung, ich glaube, ich hab's verstanden. Ich werd mal weiter probieren!  Vielen Dank nochmal
Edit: Mit der eigenen DLL kommt die gleiche Fehlermeldung...
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 05.02.05 19:47
Hey, sorry wenn das etwas heftig klang. War nicht so gemeint. Ich habe nämlich festgestellt, dass Inno Setup kein Problem damit hat. Das Setup startet und lädt die DLL offensichtlich. Also, diese Fehlermeldung sehe ich nicht. Allerdings kriege ich Fehlermeldungen beim Typ "pointer".
Als Beispiel habe ich das "Simplest"-Sample aus dem Delphi-Ordner der FMod-Bibliothek genommen und mich an den dort verwendeten Kommandos orientiert. Aber wie gesagt, mit der Zuweisung "nil" bzw. der Kontrolle, ob der Pointer "nil" ist, hat Inno Setup wohl so seine Probleme.
Na ja, ist eben nicht Delphi. 
|
|
famelor 
Hält's aus hier
Beiträge: 9
|
Verfasst: Sa 05.02.05 21:05
ok, wenn ich noch was rausfinde, schreib ichs rein, ansonsten versuch ich mich halt an ner externen Executable, die separat gestartet wird...
|
|