tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
2496
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    NeoKalam NeoKalam ist offline Grünschnabel
    Registriert seit
    Jul 2003
    Beiträge
    4
    Ich will eine funktion der Klasse CPHLView (meine Ansichtsklasse) mit der lua funktion lua_register(...) für LUA verfügbar machen. Dabei bekomme ich immer wieder den fehler:

    : error C2664: 'lua_pushcclosure' : Konvertierung des Parameters 2 von 'int (struct lua_State *)' in 'int (__cdecl *)(struct lua_State *)' nicht moeglich
    Das ist die Funktion, die lua_register aufruft
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    void CPHLView::OnExec() 
    {
        lua_State* luaVM = lua_open();
     
     
        lua_baselibopen(luaVM);
        lua_iolibopen(luaVM);
        lua_strlibopen(luaVM);
        lua_mathlibopen(luaVM);
     
        lua_register(luaVM, "Relais_On", l_Ron);
        lua_register(luaVM, "Relais_Off", l_Roff);
        lua_register(luaVM, "Wait", l_wait);
     
        lua_dofile(luaVM, "test.txt");
     
        lua_close(luaVM);
    }

    und das ist eine der funktionen die ich für lua verfügbar machen möchte:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    int CPHLView::l_wait(lua_State *luaVM)
    {
        CRelaisCtrl *rl = new CRelaisCtrl;
        rl->wait((int)lua_tonumber(luaVM, 1));
        lua_pushnumber(luaVM, 0);
     
        delete rl;
        return 1;
    }
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.144
    Lua kann keine Member-Funktionen binden (zumindest nicht direkt). Bei Member-Funktion einer Klasse/eines Structs wird implizit ein this-Pointer auf die aktuelle Instanz mitübergeben, und der stört in dem Fall (Lua will ja nur einen Parameter, ein lua_State*).

    Versuche die gewünschte Funktion static zu deklarieren. So wie deine Funktion aussieht, sollte das Problemlos gehen.

    Wenn du wirklich Objekte von Lua aus ansprechen willst, bist du besser mit einem Class-Wrapper beraten.

    Hier 2, die ich persönlich verwende:

    Luna: ein einfacher Template-Header, Parameter müssen selbst vom Stack geholt und wieder auf den Stack geschoben werden. Ist aber sehr compiler-freundlich, hat keine grossen Ansprüche

    LuaBind: Ein mächtiger Template-Komplex, stützt sich auf Boost. D.h. Boost muss zusätzlich verfügbar sein. Dafür erhält man einfachste Klassen- und Funktionsdefinition, die Parameter werden automatisch aus- und eingepackt. Kann den Compiler mächtig in die Knie zwingen, vor allem bei mehr als 3 Parametern.
    Hat in der letzten von mir getesten Version Probleme mit coroutines. Müsste allerdings inzwischen auch schon behoben sein.
     

  3. #3
    aug123 Tutorials.de Gastzugang
    Das gibt dann bei MFC aber weitere Probleme weil die MFC-Mutterklassen das Kompilieren der Templateklasse stören.
     

Ähnliche Themen

  1. Array auslesen ohne den Index zu kennen
    Von Herror im Forum PHP
    Antworten: 4
    Letzter Beitrag: 18.09.09, 21:03
  2. sql Select auf Tabelle ohne Spaltennamen zu kennen
    Von StefanLausL im Forum Relationale Datenbanksysteme
    Antworten: 11
    Letzter Beitrag: 26.05.09, 14:04
  3. Antworten: 3
    Letzter Beitrag: 12.11.08, 19:04
  4. Firefox funktioniert nicht auch nicht nach neuinstallation
    Von Confed im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 28.11.07, 14:44
  5. Wo lernt Ihr eure Freundinnen/Freund kennen?
    Von urika im Forum Smalltalk
    Antworten: 13
    Letzter Beitrag: 06.08.04, 17:40