ok, j'ai testé et je ne vois pas de probleme particulier avec cette dll.
il s'agit d'une mauvaise utilisation. j'ai corrigé comme çà vite fait.
le fichier include 'ode.pbi'
Code : Tout sélectionner
;--
;-- ODE.DLL API
;--
Structure v3d
x.f
y.f
z.f
EndStructure
Prototype dWorldCreate()
Prototype dWorldSetGravity(idW.l, x.f, y.f, z.f)
Prototype dWorldGetGravity(idW.l, *g)
Prototype dWorldDestroy(idW.l)
Define ode_lib.l = OpenLibrary(#PB_Any, "ode.dll")
If Not ode_lib
MessageRequester("Error", "Can't initialize the library `ode.dll` !", #MB_ICONERROR) : End
EndIf
Global dWorldCreate.dWorldCreate = GetFunction(ode_lib, "dWorldCreate")
Global dWorldSetGravity.dWorldSetGravity = GetFunction(ode_lib, "dWorldSetGravity")
Global dWorldGetGravity.dWorldGetGravity = GetFunction(ode_lib, "dWorldGetGravity")
Global dWorldDestroy.dWorldDestroy = GetFunction(ode_lib, "dWorldDestroy")
;--
;-- Vérifie si les fonctions sont bien initialisées.
;--
Debug "======================"
Debug dWorldCreate
Debug dWorldSetGravity
Debug dWorldGetGravity
Debug dWorldDestroy
Debug "======================"
et le fichier test 'main.pb'
Code : Tout sélectionner
IncludeFile "ode.pbi"
Define world.l, gravity.v3d
world = dWorldCreate()
If world
dWorldSetGravity(world, 2.33, -9.8, 0.165)
If dWorldGetGravity (world, @gravity)
Debug StrF(gravity\x, 3)
Debug StrF(gravity\y, 3)
Debug StrF(gravity\z, 3)
EndIf
dWorldDestroy(world)
EndIf
Le truc c'est que tu as déclaré dans le désordre la globale idW.
Si la globale idW est utilisée dans l'include ode.pbi mais que tu la déclare dans main.pb, purebasic ne saura pas qu'il s'agit d'une globale dans l'include.
Bien plus important encore,
Pourquoi détruire le world avec kill() AVANT d'utiliser la fonction GetGravity() ???
C'est clair que là cà plante puisque tu sollicites une fonction qui nécessite que le monde soit créé, or tu le détruit juste avant.