2017-05-06 1 views
0

J'utilise actuellement la version 6.0.0 ChaiScript et Visual Studio 2017.Erreur: « Impossible de trouver l'objet: utiliser »

Dans mon C++, je suis une référence à la récupération d'une fonction on_init() à partir d'un fichier de script, et l'exécuter. L'objet ChaiScript a été construit avec le constructeur par défaut/vide. La fonction ressemble à ceci:

def on_init() { 
    use("scripts/test.chai"); 
} 

Le contenu de "scripts/test.chai" ressemble à ceci:

class A { 
    def A() { 
    print("Created an instance of A!"); 
    } 
} 

Ma structure de fichier ressemble à ceci:

bin 
    \ 
    | my_executable.exe 
    | scripts 
      \ 
      | main_menu.chai 
      | test.chai 

Lors de l'exécution la fonction on_init() illustrée ci-dessus, la console imprime le message suivant:

Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" Error: "Can not find object: use" 

L'utilisation de "usepaths" lors de la construction de l'objet ChaiScript aboutit à la même situation.

J'ai essayé use("test.chai") ainsi que use("scripts/test.chai"), et les deux ont pour résultat les mêmes messages.

Je ne fournis aucune chaiscript::Options enum lors de la construction de l'objet ChaiScript, il devrait donc utiliser la valeur par défaut (qui semble contenir External_Scripts ainsi que Load_Modules).

Je suis en train de compiler ChaiScript avec la sécurité des threads désactivée. Je n'ai aucun problème à exécuter les autres fonctions intégrées dans le corps de ce script, y compris dans les autres fonctions que je récupère (en C++) de la même manière que celle-ci.

Si d'autres informations sont nécessaires, faites-le moi savoir. Est-ce que j'utilise la fonction "use" incorrectement?

+0

Il se comporte comme si 'use' manquait complètement à l'exécutable. Cela ou, 'test.chai' est de faire quelque chose qui provoque une récursivité. Les deux sont bizarres.Mais j'ai besoin d'un exemple plus complet pour diagnostiquer. 'use' est utilisé pour * tous * les tests unitaires, donc on sait qu'il fonctionne. – lefticus

Répondre

1

EDIT: Doit avoir été vraiment très haut quand j'ai écrit les choses en dessous, mais je vais le laisser là juste parce que je suis étonné que je pourrais même arriver à cela.

La vraie réponse est que vous devez explicitement passer chaiscript::Options::External_Scripts au constructeur ChaiScript afin d'activer les fonctions de chargement de fichiers.

je le fais comme ceci:

class ChaiPlugin 
{ 
public: 
    /* stuff */ 
private: 
    chaiscript::ChaiScript chai = { {}, {}, { chaiscript::Options::External_Scripts } }; 
}; 

use est uniquement utilisé à des fins de débogage.

à l'intérieur unittests/boxed_cast_test.cpp:

template<typename T> 
void use(T){} 

Je crois que ce que vous cherchez est usefile("scripts/test.chai").