Я пишу игру на C ++ и связываю ее с Lua .Инструмент, который я выбрал для этой задачи, был SWIG , так как я хочу сделать свою игру доступной для написания на python или другом языке.Я также использую SFML 1.6 в качестве API для мультимедийного доступа.Эта игра также предназначена для кроссплатформенной компиляции.Сейчас я работаю с Xubuntu 11.04 для первой попытки проекта.
Я уже завернул 90% + API SFML в свою игру, но когда я попытался создать новый sf::Color
объект в моем скрипте Lua (чтобы я мог вызвать sf::RenderWindow::Clear(sf::Color)
метод), мой скрипт Lua обвинил, что этот вызов ...
renderWindow:Clear( sf.Color( 200, 0, 0 ) ) --Fill the screen with the color.
... попытался вызвать метод sf:Color( Uint8, Uint8, Uint8 )
;Это предупреждение предупредило меня о том, что SWIG не может определить специальные целочисленные значения SFML для межплатформенной разработки, определенные в заголовочном файле <SFML/Config.hpp>
.
Теперь в моем файле SWIG Config.i
я мог бы просто написать...
typedef unsigned char Uint8; //Always correct
typedef unsigned short int Uint16; //Not always true
typedef unsigned int Uint32; //Not always true
... и при компиляции моего проекта на другой платформе я мог просто написать эти typedefs для этой новой платформы, но я обнаружил, что c's limits.h
Заголовочный файл содержит некоторый препроцессор , определяющий для размера каждого типа целочисленной переменной.
Моя основная цель - создать эти typedefs в моем SWIG-скрипте, не беспокоясьна какой платформе (или компиляторе) я компилирую свой проект.
Прямо сейчас мой Config.i
SWIG-файл выглядит так:
%{
#include <limits.h>
#include <climits.h>
#include <SFML/Config.hpp>
%}
%include <SFML/Config.hpp>
И моя SWIG-команда для генерации оболочекis:
swig -c++ -lua -I/PathToSFML -I/PathToLimits ./SFML.i
Я надеялся, что SWIG сможет найти переменные, определенные препроцессором, в файле limits.h
, который используется <SFML/Config.hpp>
, но я не смог сделать эту работу ...
у вас есть несколько советов о том, как выполнить мою задачу (динамическое определение типов для каждой платформы) или знаете, как заставить swig получить переменные препроцессора, определенные в limits.h
?