Module mit dll abspielen [Gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Module mit dll abspielen [Gelöst]

Beitrag von Tsuki-Namida »

Hallo,
ich habe vor eine DLL Datei zu machen mit der mal module abspielen kann (später noch andere formate)

diese dll soll später in einer scriptsprache (Ruby RGSS) verwendet werden
ich habe zunächst das erst noch in der Probier fase und habe mal eine kleine dll geschrieben mit ein paar zeilen momentahn nur ein Modul Player ohne irgentwas andere...

ich habe die dll in einem weiternen text aufgerufen um zun sehn ob es so funktioniert nur leider erfolg los...

hier erst mal die dll:

Code: Alles auswählen

ProcedureDLL Playmod(Datei$)
  If InitSound()
    If LoadModule(0,Datei$)
      PlayModule(0)
    Else
      MessageRequester("Fehler","Die angegebene Datei konnte nicht geladen werden oder Existiert nicht.")
    EndIf
  Else
    MessageRequester("Hinweis","Die Soundkarte wuirde nichtgefunden oder wird anderweitig genutzt.")
  EndIf
EndProcedure
wenn ich die dll aufrufe kokomme ich immer die meldung das die angegebene datei nicht geladen werden konnte

das wäre meinb erstes problem...

dann stellte ich mir die frage wie ich die gerade gespielte datei wieder stoppen kann (fenn sie ggf gespielt wird)

okay ich bin jetzt der meinung das es gar nicht geht die datei abzu spielen so wie die dll aufgebaut ist
denn wenn der text ausgeführt wurden ist, ist ja der priogramm teil fertig und wird beendet...

habt ihr ggf eine alternativ lösung parat?

PS: Ich nutze PB 4.30
Zuletzt geändert von Tsuki-Namida am 22.06.2009 19:28, insgesamt 1-mal geändert.
Bild
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Beitrag von jojo1541 »

Stoppen kannst du sie, indem du eine weitere ProcedureDLL machst, in der du den Befehl StopModule(Module) einbaust.

Wenn ein Modul fertig ist endet es automatisch, zuminderst tat es das bei mir trotz Wiederholungsmarken.
Zuletzt geändert von jojo1541 am 22.06.2009 18:08, insgesamt 1-mal geändert.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Module mit dll abspielen

Beitrag von Kiffi »

<Halb-OT>
Magix-Soft <Kain> hat geschrieben:PS: Ich nutze PB 4.30
nimm lieber die 4.31. In dieser Version sind eine Reihe von Fehlern
behoben worden.

<Halb-OT>

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@volti
okay demnach wird es ja wohl doch gehn in einer dll eine modul datei abzu spielen...
aber warum kommt de meldung das die datei nicht geladen werden kann???

@Kiffi werde gleich mal updaten danke
Bild
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Module mit dll abspielen

Beitrag von Kiffi »

Magix-Soft <Kain> hat geschrieben:wenn ich die dll aufrufe kokomme ich immer die meldung das die angegebene datei nicht geladen werden konnte
wenn LoadModule() fehlschlägt, solltest Du prüfen, ob...

1.) die Datei auch wirklich vorhanden ist.

und

2.) es sich bei der angegebenen Datei auch wirklich um eine durch LoadModule zu ladende Datei handelt.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

InitSound() ist dort in jedem falle verkehrt, bzw. ist sicherzustellen, das es
nur einmal aufgerufen wird.

Entweder eine statische Variable als Flag nutzen oder AttachProcess() oder
einfach eine Procedure nur für InitSound()
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Beitrag von jojo1541 »

Die Funktion an sich ja, aber es dürfen keine DirectX Intialisierungsroutinen in den mehrfach aufgerufenen DLL-Prozeduren stehen. was bei dir der Fall ist.(InitSound()) Evtl. eine Extra PRocedure fü machen.


Edit: verdammt Ts-Soft war schneller.
Zuletzt geändert von jojo1541 am 22.06.2009 18:28, insgesamt 1-mal geändert.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wo steht das in der Hilfe? (Verweis bitte)

... ich würde mal schätzen, dass das bedeutet, dass in einer DLL initialisierte Funktionen nicht für Befehle im Hauptprogramm zur verfügung stehen.

die bare Aussage "DX Funktionen dürfen nicht in DLLs initialisiert werden" ist schlicht falsch.

[edit]
> Edit: verdammt Ts-Soft war schneller.
womit? er hat was völlig anderes ausgesagt als du...

[edit2]
ach JETZT ergibt deine Aussage einen sinn... verdori.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

naja da ich ja noch in der test fase bin (wie es nun geh könnte)

ist es ja egal wo InitSound() steht es wird jedenfalls ausgefürht und wenn es nicht möglich ist kommt ebenfalle eine meldung...

LoadModule() wird auch überprüft mit einer If abfrage und das schlägt ja fehl -.- (Siehe quelltext oben im ersten Beitrag)

der Fad stimmt 100%
ich habe es mit verschiedenen Datei formaten versucht: *.it, *.s3m, *.mod und *.xm

wenn ich die den phad bei LoadModule() direckt eingebe funktioniert es ja aber das ist nicht das was ich möchte
Bild
Benutzeravatar
jojo1541
Beiträge: 431
Registriert: 15.09.2007 17:12
Wohnort: Irgendwo im Nirgendwo

Beitrag von jojo1541 »

Ich meinte ja nicht, dass sie nich drinstehen dürfen, sondern nicht in FUnktionen die öfter als einmal aufgerufen werden. Ich schreibe mein InitSound() ja auch nich in die Main-loop meines Programms.

Zur Hilfe, das war mein Fehler, ich habe dass AttachProcess überlesen.
[edit]
> Edit: verdammt Ts-Soft war schneller.
womit? er hat was völlig anderes ausgesagt als du.
Nein, er hat gesagt, dass InitSound() da fehl am Platz ist und ich auch.(wenn auch auf andere weiße... <) )
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Antworten