tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
0
ZUGRIFFE
1052
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    badday badday ist offline Mitglied Brokat
    Registriert seit
    Dec 2009
    Beiträge
    321
    Blog-Einträge
    1
    Moin zusammen,

    ich habe hier ein Problem mit einem Programm und komme einfach nicht darauf, was falsch ist. Ich habe es schon versucht, in diversen IRC-Channels und einem anderen Forum Hilfe zu finden, leider konnte mir keiner helfen.
    Das ganze ist relativ schwer zu beschreiben, aber ich versuche es einfach mal.

    In mainwindow.cpp wird
    Code :
    1
    2
    3
    
    lFunc *temp = new lFunc(label);
    funcMap.insert(pair<QString, lFunc *>(label, temp));
    connect(button, SIGNAL(clicked()), funcMap[label], SLOT(run()));

    aufgerufen.
    Zeile 1: lFunc ist eine Klasse:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    class lFunc: public QObject
    {
    Q_OBJECT
    public:
        lFunc(QString,  QObject* parent = 0);
        lFunc(QObject *parent = 0): QObject(parent) {}
    public slots:
        void run();
     
    private:
        QString funcName;
    };

    Z. 2: funcMap ist ein Map mit QString und lFunc * .
    Z. 3: Hier wird der jeweilige Knopf mit dem Slot run() verbunden
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    void lFunc::run()
    {
        lua_pushstring(MainWindow::script.get(), funcName.toAscii());
        lua_gettable(MainWindow::script.get(), LUA_GLOBALSINDEX);
        lua_pushnil(MainWindow::script.get()); //funktioniert auch ohne nicht
        if(lua_pcall(MainWindow::script.get(), 1, 0, 0)!=0)
        {
            QString info = lua_tostring(MainWindow::script.get(), -1);
            std::cout<<"error running function "<<funcName.toStdString()<<": "<<info.toStdString()<<std::endl;
        }
    }

    Hier ein Beispiel Skript:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    require "mylib"
    function getsin(x)
        mylib.PushButton("new", 23, 23)
        mylib.PushButton("next", 1, 1)
        mylib.LineEdit("test: ", 2, 2)
        return mylib.example(x)
    end
     
    function new_clicked()
        mylib.PushButton("made from new", 23, 24)
    end
    getsin(x) ist eine in C geschriebene Funktion und funktioniert.
    Wenn ich
    Code :
    1
    
    new_clicked()
    einfach im Skript aufrufe, so funktioniert auch das.
    Das Problem ist nur, dass wenn es über run() aufgerufen werden sollte der Fehler
    error running function new_clicked: attempt to call a nil value
    entsteht.
    Versuchsweise luaL_dostring(L, "new_clicked()") funktionierte auch nicht.

    MainWindow::script.get() gibt lua_State* zurück, das funktioniert auch, da ich lua_State *F = MainWindow::script.get(); ausgeführt habe und es - soweit ich das im Debugger sehe - einen richtigen Wert bekommt.
    script ist ein statischer Member von MainWindow:
    Code :
    1
    
    static Script script;
    Es hat eine Methode get(), das wie oben beschrieben lua_State* zurückgibt.


    Kann mir jemand weiterhelfen?

    Gruß,

    badday



    EDIT:
    Problem gelöst. Ich hatte intelligenter weise nicht das statische Script - Objekt benutzt. Ob es nur daran lag, kann ich aber nicht sicher sagen.
    Geändert von badday (15.03.10 um 18:43 Uhr)
     

Ähnliche Themen

  1. Funktion innerhalb einer Funktion aufrufen
    Von Atalión im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 31.01.10, 17:32
  2. DB-Funktion aufrufen
    Von chuqa im Forum VisualStudio & MFC
    Antworten: 0
    Letzter Beitrag: 04.07.07, 15:18
  3. PHP Funktion in JavaScript Funktion aufrufen, aber wie ?
    Von blumshuett im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 24.03.05, 11:32
  4. Funktion nach Aufrufen einer Funktion
    Von ShinmA im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 15.08.03, 10:41
  5. Mit Funktion andere Funktion aufrufen
    Von sheaven im Forum PHP
    Antworten: 1
    Letzter Beitrag: 07.04.03, 21:50

Stichworte