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:

Beitrag von Tsuki-Namida »

okay ich habe mal einen anderen test gemacht und habe einen fehler gefunden.... ich weis nur nicht wie man ihn beheben kann... hier noch mal meine dll:

Code: Alles auswählen

ProcedureDLL Playmod(Datei$)
  ;If InitSound()
    MessageRequester("Test",Datei$)
    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
und hier wie ich die dll aufrufe:

Code: Alles auswählen

InitSound()
OpenLibrary(0,"mod.dll Test.dll")
CallCFunction(0, "Playmod","I:\Desktop\Module\X\XTRANCE.IT")
OpenWindow(0,0,0,0,0,"")
Repeat:WaitWindowEvent():ForEver
okay in der dll ist ja diese zeile:
MessageRequester("Test",Datei$)
da bekomme ich volgende meldung:
Bild

aber in Datei$ sollte dieser Phat stehn: "I:\Desktop\Module\X\XTRANCE.IT"

was ist falsch bzw. wie kann ich das beheben?
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

volti hat geschrieben: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... <) )
"Weise"!
..."Weiße" ist ein preußisches obergäriges Weizenbier.

zu dem Zeitpunkt als ich mein Posting geschrieben habe,
hat deines nur die Aussage "DX-Inits dürfen nicht in DLL-Prozeduren stehen" enthalten!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
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 »

Du solltest Dich mal entscheiden ob Unicode oder Ansi, bzw. Prototypes
zusammen mit Pseudotypes sollten helfen.
Prototypes sollteste in jedem Fall nehmen statt CallfunctionFast.

Und CallCFunctionFast ist ja nun total verkehrt
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 »

Kaeru Gaman hat geschrieben: zu dem Zeitpunkt als ich mein Posting geschrieben habe,
hat deines nur die Aussage "DX-Inits dürfen nicht in DLL-Prozeduren stehen" enthalten!
Jup, dass hab ich ja aber leider erst gemerkt, nachdem ich erneut auf den Sendebutton gedrückt hatte, um meine editierte Nachricht zu senden. Hab sie dann ja gleich nochmal geändert, als es mir nach deinem ersten Post aufgefallen ist.
Ich verkaufe Rechtschreibfehler und jede menge GROßBUCHSTABEN. Alles unbegrenzt zu haben.
Benutzeravatar
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@st-soft
okay ich habe es probiert....

zum ersten hatte ich noch nie von dieser funktion gehört
zum zweiten.... es wird der dll immernoch nicht den richtigen string übermittelt...
also bei der dll kommt immernoch das selbe raus wie zufor (siehe bild in meinem vorherigen beitrag)

hier der quelltext wie ich die dll nun aufrufe:

Code: Alles auswählen

InitSound()
Prototype.l Playmod(Datei$)
OpenLibrary(0,"mod.dll Test.dll")
Play.Playmod = GetFunction(0, "Playmod")
;CallCFunction(0, "Playmod","I:\Desktop\Module\X\XTRANCE.IT")
Play("I:\Desktop\Module\X\XTRANCE.IT")
OpenWindow(0,0,0,0,0,"")
Repeat:WaitWindowEvent():ForEver
Bild
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 »

Entweder die DLL ist Unicode oder Dein Testprogramm, also entweder änderste das oder ein von diesen:

Code: Alles auswählen

Prototype Playmod(Datei.p-unicode)
Prototype Playmod(Datei.p-ascii)
sollte helfen.

Ein bißchen gewissenhafteres lesen der Hilfe sollte viele Fragen überflüssig
machen. Das ich hier per Ferndiagnose festelle, das Du vollkommen
unlogischer Weise einmal ASCII und das andere Unicode kompilierst :freak:
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
Tsuki-Namida
Beiträge: 633
Registriert: 17.11.2005 13:27
Kontaktdaten:

Beitrag von Tsuki-Namida »

@st-soft
ups.... stimmt du hattest recht^^ sorry ha habe ich nicht aufgepasst.....

vielen lieben dank an euch allen :)

PS: zum thema InitSound()
ich habe initSound() in der anwendung reingemacht die die dll datei aufruft und aus der dll datei entvernt da geht es schon mal nicht!
Initsound muss auf jeden fall in die dll datei damit es geht
Bild
Antworten