wxlua绑定不适用于我使用SWIG制作的着色器对象。
我使用 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();
};
我创建了 abc.i 文件,用于 SWIG 的输入:
%module wxAppManagerLua
%{
#include "wxAppManager.h"
#include "wx/socket.h"
%}
//wrapper over wxIPV4address class IPV4addressLua //: public wxIPV4address ................... ....
然后我编写了 makefile 来生成 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)
~
...
===== 我这样生成我的 so:-
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
=====
我这样编写我的lua文件:
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)
.... ....
...
我的代码在最后一行失败,说..
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
===== 请注意..... wxSockAddess 是 wxIPV4address 的基类,我从中派生了我的类。
在这个链接中检查 http://docs.wxwidgets.org/trunk/classwx_i_paddress.html。
有人能帮忙吗?
我的诊断是:-
基本的问题是 每当我使用 SWIG 制作 sos 并尝试从 lua 引用函数或类时....它运行良好,直到我引用任何 wxwidget 类或函数... 即使我的两个 sos 能够引用类中的类...但不与 wxwidgets 类一起使用... 虽然....如果我继续引用 wx.so 的任何类到任何其他 wx.so 的类中,它会工作......
请告诉我是什么阻止了 lua 了解我的类的类型以及 wxwidgets 中任何类的类型。
我知道 wxwidgets 的绑定是使用传统方法生成的,而不是使用 SWIG 生成的......这可能会导致问题吗?
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你需要告诉 SWIG 如何将 SWIG 生成的类型转换为函数调用能够理解的类型。请查看 Typemap 部分的 SWIG 用户文档。你应该能够创建一组 typemaps,让你能够将 SWIG 生成的类型转换为你的非 SWIG 生成的 wxwidget 绑定所识别的类型。