views:

91

answers:

2

Hi, I made a class using wxwdigets

//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();
};

I make the abc.i file for SWIG input like this

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

//wrapper over wxIPV4address class IPV4addressLua //: public wxIPV4address ................... ....

then I write make file to generate SWIG bindings : ===

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)

~

...

===== I generate my so like this :-

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

=====

I write my lua file like this :

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)

.... ....

...

My code fails at the last line saying..

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

===== Please Note ..... wxSockAddess is base class of wxIPV4address from which I derived my class.

Check in this link http://docs.wxwidgets.org/trunk/classwx%5Fi%5Fpaddress.html

Can anyone help?

My Diagnosis is :-

The basic problem is Whenever I make sos... using SWIG and try to refer fucntions or clases from lua .... it works fine till when I refer any wxwidget class or funtion ... even two sos of mine are able to refer to the classes across sos ... but not with wxwidgets clases ... although .... if I continue to refer any class of wx.so to any other class of wx.so it works ...

Kindly let me know what is stopping lua from understanding the type of my class to any class of wxwidgets.

I know the bindings of wxwidgets have generated by traditional methods and not by SWIG .. is this causing a problem ?

+3  A: 

You need to tell SWIG how to convert the SWIG-generated type into one understood by the function calls you're trying to make. Take a look at the Typemap section of the SWIG user documentation. You should be able to come up with a set of typemaps that will allow you to convert the SWIG-generate type into one recognized by your non-SWIG generated wxwidget bindings.

Aaron Saarela
A: 

Thanks Aron.

This works and I am able to make my shared objects work properly.

-Ashutosh

Ashutosh
Cool. Would You accept my answer? Thanks!
Aaron Saarela