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 ?