IMA bei Benutzung von DLL in Procedure

Für allgemeine Fragen zur Programmierung mit PureBasic.
Salk
Beiträge: 6
Registriert: 12.12.2012 20:46

IMA bei Benutzung von DLL in Procedure

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: IMA bei Benutzung von DLL in Procedure

Beitrag von STARGÅTE »

Wo genau kommt es zum IMA?

Innerhalb von Proceduren sollte man Protected nutzen und nicht Define
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Re: IMA bei Benutzung von DLL in Procedure

Beitrag von freak »

Versuch es mal mit PrototypeC
Salk
Beiträge: 6
Registriert: 12.12.2012 20:46

Re: IMA bei Benutzung von DLL in Procedure

Beitrag 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.
Salk
Beiträge: 6
Registriert: 12.12.2012 20:46

Re: IMA bei Benutzung von DLL in Procedure

Beitrag 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!
Antworten