gpt4 book ai didi

lua - wxlua 绑定(bind)不适用于我使用 SWIG 制作的着色器对象

转载 作者:行者123 更新时间:2023-12-04 07:02:06 26 4
gpt4 key购买 nike

我使用 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();
};

我像这样为 SWIG 输入制作 abc.i 文件
%module wxAppManagerLua
%{
#include "wxAppManager.h"
#include "wx/socket.h"
%}

//wxIPV4地址的包装器
class IPV4addressLua//: public wxIPV4address
.....................
……

然后我编写 make 文件来生成 SWIG 绑定(bind):===
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)

~

...

=====
我像这样生成我的:-
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: 期望参数 1 有一个“wxSockAddress”,但得到一个“用户数据”。

函数调用:'wxSocketServer(userdata)'

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

堆栈回溯:

[C]:在函数“wxSocketServer”中
SockTestAppMgr.wx.lua:584:在函数“CreateServer”中
SockTestAppMgr.wx.lua:682:在函数'main'中
SockTestAppMgr.wx.lua:694:在主 block 中

=====
请注意..... wxSockAddess 是 wxIPV4address 的基类,我从中派生了我的类。

checkin 此链接 http://docs.wxwidgets.org/trunk/classwx_i_paddress.html

任何人都可以帮忙吗?

我的诊断是:-

基本问题是
每当我制作 sos... 使用 SWIG 并尝试从 lua 引用函数或类时......它工作正常,直到我引用任何 wxwidget 类或函数......
甚至我的两个 sos 都能够引用跨 sos 的类......但不能使用 wxwidgets 类......
虽然....如果我继续将任何 wx.so 类引用到任何其他 wx.so 类,它就可以工作......

请让我知道是什么阻止了 lua 理解我的类的类型到任何类的 wxwidgets。

我知道 wxwidgets 的绑定(bind)是通过传统方法生成的,而不是通过 SWIG 生成的 ..这会导致问题吗?

最佳答案

您需要告诉 SWIG 如何将 SWIG 生成的类型转换为您尝试进行的函数调用可以理解的类型。看看Typemap section的 SWIG 用户文档。您应该能够提出一组类型映射,允许您将 SWIG 生成的类型转换为非 SWIG 生成的 wxwidget 绑定(bind)所识别的类型。

关于lua - wxlua 绑定(bind)不适用于我使用 SWIG 制作的着色器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1685655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com