2009-11-06 9 views
2

J'ai fait une classe à l'aide wxwdigetsliaisons wxlua ne fonctionne pas avec mes shaderobjects faites avec d'SWIG

//wrapper over wxIPV4address 
class IPV4addressLua : public wxIPV4address 
{ 

    public: 
      IPV4addressLua(); 
      ~IPV4addressLua(); 
      bool SetService (const wxString &service); 
      bool SetService (unsigned short service); 
      unsigned short GetService() const; 
      wxSockAddress* GetwxSockAddress(); 
      wxIPV4address GetwxIPV4address(); 
      wxSocketServer* GetwxSocketServer(); 
}; 

rendre le fichier abc.i pour l'entrée SWIG comme celui-ci

%module wxAppManagerLua 
%{ 
#include "wxAppManager.h" 
#include "wx/socket.h" 
%} 

// wrapper sur wxIPV4address classe IPV4addressLua //: wxIPV4address publique ................... ....

j'écris faire fichier pour générer des liaisons SWIG: ===

TARGET= wxAppManagerLua.so 
WRAPPER= wxAppManager_wrap.cxx 
SRCS= $(ROOTSRC)/wxAppManager.cpp $(ROOTSRC)/XMLReader.cpp $(WRAPPER) 

INTERFACE=wxAppManager.i 
CC= g++ 
FLAGS=-shared -fPIC -DDEBUG=1 
SWIGFLGS= -lua -c++ -includeall -v 
RM=rm -rfv 

all:$(WRAPPER) 

$(TARGET) : $(SRCS) 
     $(CC) $(FLAGS) -o $(TARGET) $(SRCS) $(EXTRAINC) $(WXCONFIGFLGS) 

$(WRAPPER): 
     swig $(SWIGFLGS) -I/usr/include $(EXTRAINC) $(INTERFACE) 

clean: 
     $(RM) *.so* $(WRAPPER) 

~

...

===== je produis mon soi comme ceci: -

g++ -g -shared -fPIC -o wxAppManagerLua.so ./wxAppManager_wrap.cxx ./wxAppManager/src/XMLReader.cpp ./wxAppManager/src/wxAppManager.cpp -I./ -I./wxAppManager/inc/ -I/usr/local/lib/wx/include/gtk2-ansi-debug-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXGTK__ -pthread -L/usr/local/lib -pthread -lwx_gtk2d_richtext-2.8 -lwx_gtk2d_aui-2.8 -lwx_gtk2d_xrc-2.8 -lwx_gtk2d_qa-2.8 -lwx_gtk2d_html-2.8 -lwx_gtk2d_adv-2.8 -lwx_gtk2d_core-2.8 -lwx_based_xml-2.8 -lwx_based_net-2.8 -lwx_based-2.8

=====

J'écris mon fichier lua comme ceci:

function CreateServer() 

    -- Create the address - defaults to localhost:0 initially 

    local addr = wxAppManagerLua.IPV4addressLua() 
    if addr ~= nil then 
      print(" Calling Bind Port ") 
      addr:SetService(3000) 
    end 

    port = addr:GetService() 
    print(" Binded to Port "..port) 

    -- Create the socket 
    SockAddr = wx.wxSockAddress 

    --CODE FAILS HERE 
    SOCKSERVER = wx.wxSocketServer(addr) 

.... ....

...

Mon code échoue à la dernière ligne disant ..

 
SockTestAppMgr.wx.lua:584: wxLua: Expected a 'wxSockAddress' for parameter 1, but got a 'userdata'. 

Function called: 'wxSocketServer(userdata)' 

01. wxSocketServer::wxSocketServer([wxSockAddress, integer]) 

stack traceback: 

     [C]: in function 'wxSocketServer' 
     SockTestAppMgr.wx.lua:584: in function 'CreateServer' 
     SockTestAppMgr.wx.lua:682: in function 'main' 
     SockTestAppMgr.wx.lua:694: in main chunk 

===== Veuillez noter ... wxSockAddess est la classe de base de wxIPV4address à partir de laquelle j'ai dérivé ma classe.

Vérifiez dans ce lien http://docs.wxwidgets.org/trunk/classwx_i_paddress.html

Quelqu'un peut-il aider?

Mon diagnostic est le suivant: -

Le problème fondamental est Chaque fois que je fais sos ... en utilisant SWIG et essayer de se référer des fonctions ou des classes de Lua .... cela fonctionne bien jusqu'à ce que quand je parle une classe wxWidget ou de la fonction ... même deux de mes sos sont en mesure de se référer aux classes à travers sos ... mais pas avec les classes wxwidgets ... bien que .... si je continue à référencer une classe de wx.so à tout Autre classe de wx.so cela fonctionne ...

Veuillez me faire savoir ce qui empêche lua de comprendre le type de ma classe à n'importe quelle classe de wxwidgets.

Je sais que les liaisons de wxwidgets ont été générées par des méthodes traditionnelles et non par SWIG .. est-ce que cela pose problème?

Répondre

3

Vous devez indiquer à SWIG comment convertir le type généré par SWIG en un type compris par les appels de fonction que vous essayez d'effectuer. Jetez un oeil à la Typemap section de la documentation utilisateur SWIG. Vous devriez être en mesure de trouver un ensemble de typemaps qui vous permettront de convertir le type SWIG-générer en un reconnu par vos liaisons wxwidget générées non-SWIG.