IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C Discussion :

Passage de tableau à une fonction Lua en C


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 34
    Points : 25
    Points
    25
    Par défaut Passage de tableau à une fonction Lua en C
    Bonjour,

    Tout est dans le titre, je voulais savoir si il était possible d'appeler une fonction Lua depuis C en passant en paramètre un tableau (d'unsigned char).
    Je voudrais par exemple pouvoir passer en paramètre une matrice de jeu (tableau 2D) ou un tableau une dimension.
    Je débute pour le moment avec Lua, voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        lua_getglobal(state, luaFunction);
        if (!lua_isfunction(state, -1)) {
            lua_pop(state, 1);
        } else {
            lua_pushlstring(state, datas, len);
            lua_call(state, 1, 1);
            result = (char *)lua_tostring(state, -1);
        }
    Mais ici, je push un string.

    Ma fonction devra ensuite modifier ce tableau et le retourner au programme C.

    J'avais une autre question, quand je compile avec Code::Block mon programme, j'ai besoins d'une DLL pour pouvoir executer mon programme.
    Je voulais savoir si il est possible de s'en passer ?

    Merci d'avance pour votre aide,

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 811
    Points : 7 096
    Points
    7 096
    Par défaut
    Je fais de l'interfaçage avec l'API C et python, je ne connais pas Lua, mais le fonctionnement doit être à quelque chose prêt le même...

    Mais ici, je push un string.
    Seulement je ne comprend pas le problème, quelle est la question concernant ceci ?

    J'avais une autre question, quand je compile avec Code::Block mon programme, j'ai besoins d'une DLL pour pouvoir executer mon programme.
    Je voulais savoir si il est possible de s'en passer ?
    Alors ça je n'en sais strictement rien, google ne dit rien par rapport à cela ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si tu codes en C ou en C++, tu ne peux pas te passer de la C Run-Time Library (CRT): Soit tu la joins à ton programme, soit tu t'assures qu'elle soit bien installée sur les postes destination (via les Microsoft Visual C++ {version} Redistributable Package).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2014
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2014
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Je fais de l'interfaçage avec l'API C et python, je ne connais pas Lua, mais le fonctionnement doit être à quelque chose prêt le même...



    Seulement je ne comprend pas le problème, quelle est la question concernant ceci ?



    Alors ça je n'en sais strictement rien, google ne dit rien par rapport à cela ?
    Je voudrais passer en paramètre un tableau et non pas une chaîne de caractère.
    Coté C, j'ai un pointeur ainsi que sa taille, et je voudrais passer ces données a mon script Lua. Et les réceptionner dans un tableau (Et non un string car je peux avoir des données comme : \0).
    J'ai regardé dans la doc de la bibliothèque, mais je n'ai pas trouvé de fonctions qui ont l'aire appropriés.

    Quand je compile mon exécutable, j'ai besoins d'une DLL car j'utilise la bibliothèque Lua.
    Je voulais savoir si il n'y avait pas moyen de compiler la bibliothèque dans mon exécutable plutôt.
    Je n'ai rien trouvé non plus sur ce sujet.

    La bibliothèque python que utilise n'est pas trop lourde ?
    Je vais peut être regarder l'interfaçage entre C et python pour voir si ça correspond mieux a ce que je veux faire.

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 811
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 811
    Points : 7 096
    Points
    7 096
    Par défaut
    Je vais peut être regarder l'interfaçage entre C et python pour voir si ça correspond mieux a ce que je veux faire.
    Il est clair que je serais plus à l'aise pour t'aider

    ------------------------------------------

    La documentation préconise apparemment pushstring pour les '\0' terminated...

    Alors la question que je me pose, est la suivante: Ne peut-on pas pusher tout le tableau de chars, pour ensuite utiliser la fonction take_n par exemple ?

    Ne connaissant pas Lua, je ne suis pas sûr de mes dires...

    Autre question, ne peut-on pas faire tout en C, puis transformer le résultat de ton tableau de chars comme tu le fais après traitement avec lua_tostring ?

    Par exemple pour avoir les n premiers éléments de mon tableau de chars, je pourrais utiliser la fonction strncpy,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
     
     
    int main(void)
    {
        const char *s = "coucou";
        size_t len = strlen(s);
        size_t index = 2;
        char *result = NULL;
     
     
        if (index < len){
            result = malloc(sizeof(char) * index+1);
     
     
            if (result == NULL)
                exit(-1);
     
     
            strncpy(result, s, index);
            result[index] = '\0';
        }
     
     
        if (result != NULL){
            printf("%s\n", result);
            free(result);
        }
     
     
        return 0;
    }
    La variable result peut ensuite être traité avec lua_tostring(...)

    Je voudrais passer en paramètre un tableau et non pas une chaîne de caractère.
    Pour cette question, désolé, je n'ai toujours pas compris, quand tu parles de tableau, tu parles d'un objet Lua, n'est-ce pas ? Dans ce cas, string ou tableau ne doit rien changer, car state est un objet Lua en règle générale, peu importe l'objet.

    EDIT: Au cas où je n'ai pas compris, pourrais-tu exprimer concrètement ce que tu souhaites faire, c'est à dire sans code, le but est de faire quel genre de chose ?
    Un exemple d'entrée sortie serait là bienvenue !
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Passage tableau à une fonction
    Par label55 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 12/12/2007, 17h19
  2. Passage de tableau à une fonction: pb de debugger
    Par Felipe_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/12/2007, 09h26
  3. Réponses: 11
    Dernier message: 27/06/2007, 15h06
  4. Passage de tableau à une fonction par pointeur
    Par progfou dans le forum C++
    Réponses: 15
    Dernier message: 23/02/2007, 11h45
  5. Réponses: 8
    Dernier message: 10/03/2006, 17h28

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