Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

Problème appel fonction d'une DLL


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    avril 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : avril 2007
    Messages : 28
    Points : 25
    Points
    25
    Par défaut Problème appel fonction d'une DLL
    Bonjour,

    Je souhaiterais Loader une dll (en l'occurrence "opengl32.dll) et appeler une fonction de cette dll: glLoadMatrix.

    Pour cela j'utilise le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    mylib = cdll.LoadLibrary('OpenGL32.dll')
    DataType = c_float * 16
    matrix = DataType(0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0)
     
    mylib.glLoadMatrixf.restype = c_void_p
    mylib.glLoadMatrixf.argtypes = [POINTER(c_float*16)]
    mylib.glLoadMatrixf(pointer(matrix))
    J'obtiens l'erreur suivante et je ne vois vraiment pas pourquoi:

    ValueError: Procedure called with not enough arguments (4 bytes missing) or wrong calling convention

    Je vous remercie d'avance pour votre aide car là je suis vraiment bloqué..

    Alex

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    août 2007
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : août 2007
    Messages : 190
    Points : 215
    Points
    215
    Par défaut
    C'est un problème avec la convention d'appel de la fonction comme indiqué par le message d'erreur. La fonction glLoadMatrixf doit être appelée avec la convention d'appel stdcall. Il ne faut donc pas utiliser cdll pour charger la bibliothèque mais windll. Ce qui donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import ctypes
    import ctypes.util
     
    name = ctypes.util.find_library('OpenGL32')
    lib = ctypes.windll.LoadLibrary(name)
    DataType = ctypes.c_float * 16
    matrix = DataType(0.0,1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0)
     
    lib.glLoadMatrixf.restype = None
    lib.glLoadMatrixf.argtypes = [ctypes.POINTER(ctypes.c_float*16)]
    lib.glLoadMatrixf(ctypes.pointer(matrix))

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/05/2012, 12h11
  2. Réponses: 2
    Dernier message: 03/10/2007, 23h29
  3. Réponses: 3
    Dernier message: 01/05/2007, 17h07
  4. Problème appel JNI d'une dll via COM
    Par mfabien dans le forum C
    Réponses: 3
    Dernier message: 13/04/2007, 15h38
  5. [DLL] problème pour appeler une fonction d'une DLL
    Par bigboomshakala dans le forum MFC
    Réponses: 34
    Dernier message: 19/07/2004, 12h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo