Seite 2 von 2

Verfasst: 22.06.2009 18:37
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?

Verfasst: 22.06.2009 18:45
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!

Verfasst: 22.06.2009 18:47
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

Verfasst: 22.06.2009 18:57
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.

Verfasst: 22.06.2009 19:06
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

Verfasst: 22.06.2009 19:20
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:

Verfasst: 22.06.2009 19:28
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