Seite 1 von 1

IMA bei Benutzung von DLL in Procedure

Verfasst: 11.09.2013 15:29
von Salk
Hallo,

ich habe ein Problem bei der Verwendung der libsamplerate.
Folgender Code führt immer zu einem IMA:

Code: Alles auswählen

EnableExplicit
PurifierGranularity(1, 1, 1, 1)

Prototype pSRC_New      (converter_type.i, channels.i, *error)
Prototype pSRC_Delete   (state.i)
Prototype pSRC_StrError (*error)

;32Bit-DLL
Define DLLPath.s = "libsamplerate-0.dll" ;<-- Anpassen

Define lib = OpenLibrary(#PB_Any, DLLPath)

If lib = 0
  Debug "Couldn't open DLL."
  End
EndIf  

Global SRC_New.pSRC_New           = GetFunction(lib, "src_new")
Global SRC_Delete.pSRC_Delete     = GetFunction(lib, "src_delete")    
Global SRC_StrError.pSRC_StrError = GetFunction(lib, "src_strerror")

Procedure myProc()
  Define error, unusedVar
  Define State = SRC_New(2, 1, @error)
  Debug "State: " + State
  Debug "error: "  + error
  Debug "unusedVar: " + unusedVar
  If State = 0 ;error <> 0
    error = SRC_StrError(error)
    Debug "ErrorAddress: " + error
    Debug PeekS(error, -1, #PB_Ascii)
  Else
    State = SRC_Delete(State)
  EndIf  
EndProcedure

myProc()
CloseLibrary(lib)
Kommentiere ich 'Procedure myProc()', 'Endprocedure' und 'myProc()' aus, läuft der Code ohne irgendwelche Probleme..
Weiß da jemand was ich falsch mache?

Hier noch meine Version der dll (x86): http://www.file-upload.net/download-806 ... r.zip.html

getestet unter Win 7 x64 mit PB 5.20 Beta 18 x86

Re: IMA bei Benutzung von DLL in Procedure

Verfasst: 11.09.2013 15:39
von STARGÅTE
Wo genau kommt es zum IMA?

Innerhalb von Proceduren sollte man Protected nutzen und nicht Define

Re: IMA bei Benutzung von DLL in Procedure

Verfasst: 11.09.2013 15:47
von freak
Versuch es mal mit PrototypeC

Re: IMA bei Benutzung von DLL in Procedure

Verfasst: 11.09.2013 15:52
von Salk
Normalerweise benutze ich auch Protected, aber da ich den Procedurecode zu Testzwecken immermal wieder aus der Procedur herauskopiert habe, habe ich hier mit Define gearbeitet.

Die Fehlermeldung bekomme ich bei EndProcedure (Line 38). Die Debugausgabe sieht dabei wie folgt aus:

Code: Alles auswählen

State: 62725456
error: 2
unusedVar: 1638248
Also auch die Variable unusedVar, der ich keinen Wert zuordne, hat nach Aufruf von src_new() einen Wert ungleich Null (laut Debug). Im Variablenviewer ist wie erwartet 0 zu sehen.
Wie erwähnt, kommentiere ich Zeile 25, 38 und 40 aus (oder füge in den Procedure-Code außerhab der Procedure ein), funktioniert alles wie erwartet und unusedVar ist auch gleich 0.

Re: IMA bei Benutzung von DLL in Procedure

Verfasst: 11.09.2013 15:54
von Salk
Versuch es mal mit PrototypeC
:oops: In dem Projekt, in das ich die DLL gerade einfügen wollte, hatte ich das sogar als Erinnerung in einem Kommentar stehen..
Jetzt läufts wunderbar. Danke euch!