SFML
|
|
Saitei | Дата: Пятница, 03 Мая 2013, 19:30 | Сообщение # 1 |
старожил
Сейчас нет на сайте
| А где найти документацию? Можно английскую. П.С. ДОКУМЕНТАЦИЮ, а не УРОКИ
|
|
| |
Red_Squirrel | Дата: Пятница, 03 Мая 2013, 19:37 | Сообщение # 2 |
участник
Сейчас нет на сайте
| Saitei, http://www.sfml-dev.org/documentation.php
Сообщение отредактировал Red_Squirrel - Пятница, 03 Мая 2013, 19:38 |
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 19:46 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Код #include <SFML/Graphics.hpp> using namespace sf;
int main(void) { String w_title = "SFML Game"; RenderWindow application(VideoMode(1024,768), w_title); while(application.isOpen()) { Event event; while (application.pollEvent(event)) { if (event.type == Event::Closed) {application.close();} } application.clear(Color::Black); application.display(); } return 0; } Код 1>------ Build started: Project: SFML_game, Configuration: Debug Win32 ------ 1> main.cpp 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __thiscall sf::String::~String(void)" (__imp_??1String@sf@@QAE@XZ) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: virtual __thiscall sf::RenderWindow::~RenderWindow(void)" (__imp_??1RenderWindow@sf@@UAE@XZ) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: void __thiscall sf::Window::display(void)" (__imp_?display@Window@sf@@QAEXXZ) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: void __thiscall sf::RenderTarget::clear(class sf::Color const &)" (__imp_?clear@RenderTarget@sf@@QAEXABVColor@2@@Z) в функции _main 1>main.obj : error LNK2001: неразрешенный внешний символ ""__declspec(dllimport) public: static class sf::Color const sf::Color::Black" (__imp_?Black@Color@sf@@2V12@B)" 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: void __thiscall sf::Window::close(void)" (__imp_?close@Window@sf@@QAEXXZ) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: bool __thiscall sf::Window::pollEvent(class sf::Event &)" (__imp_?pollEvent@Window@sf@@QAE_NAAVEvent@2@@Z) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: bool __thiscall sf::Window::isOpen(void)const " (__imp_?isOpen@Window@sf@@QBE_NXZ) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __thiscall sf::RenderWindow::RenderWindow(class sf::VideoMode,class sf::String const &,unsigned int,struct sf::ContextSettings const &)" (__imp_??0RenderWindow@sf@@QAE@VVideoMode@1@ABVString@1@IABUContextSettings@1@@Z) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __thiscall sf::VideoMode::VideoMode(unsigned int,unsigned int,unsigned int)" (__imp_??0VideoMode@sf@@QAE@III@Z) в функции _main 1>main.obj : error LNK2019: ссылка на неразрешенный внешний символ "__declspec(dllimport) public: __thiscall sf::String::String(char const *,class std::locale const &)" (__imp_??0String@sf@@QAE@PBDABVlocale@std@@@Z) в функции _main 1>F:\SFML\SFML_game\Debug\SFML_game.exe : fatal error LNK1120: 11 неразрешенных внешних элементов ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== ...что не так?Добавлено (03.05.2013, 19:46) --------------------------------------------- Red_Squirrel, спасибо огромное, обыскался прям))
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 19:48 | Сообщение # 4 |
участник
Сейчас нет на сайте
| Библиотеки прилинковал?
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 19:56 | Сообщение # 5 |
старожил
Сейчас нет на сайте
| RUNGOGET2THECHOPAH, нет. А какие конкретно нужны? Их тут много Добавлено (03.05.2013, 19:52) ---------------------------------------------
Цитата (Saitei) Их тут много P.S. ляпнул глупость. У меня просто в папке либы перемещаныДобавлено (03.05.2013, 19:52) ---------------------------------------------
Цитата (Saitei) P.S. ляпнул глупость. У меня просто в папке либы перемещаны А нет, их всё-таки многоДобавлено (03.05.2013, 19:56) --------------------------------------------- что-то совсем не понимаю. Не пашет. Помогите кто-нибудь, пожалуйста
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 19:57 | Сообщение # 6 |
участник
Сейчас нет на сайте
| Там в основном дубликаты для разных сборок (дебаг/релиз) и static/dynamic. Прилинкуй sfml-graphics-d.lib, sfml-window-d.lib и sfml-system-d.lib для дебаг сборки и те же самые без постфикса -d для релиза. Все это описано в туториале с того же сайта разработчиков, если что.
Сообщение отредактировал RUNGOGET2THECHOPAH - Пятница, 03 Мая 2013, 19:58 |
|
| |
Xakep | Дата: Пятница, 03 Мая 2013, 20:12 | Сообщение # 7 |
めちゃくちゃちゃ
Сейчас нет на сайте
| основные либы вроде бы: sfml-window.lib и sfml-system.lib а вообще смотри тут: http://sfml-dev.org/tutorials/1.6/start-vc.php
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 21:12 | Сообщение # 8 |
старожил
Сейчас нет на сайте
| пишу dll, юзая SFML. Нашёл http://www.sfml-dev.org/documentation/2.0/classsf_1_1RenderWindow.php , не до конца разобрался проблема здесь:
Код extern "C" __declspec(dllexport) void Init(int w_width, int w_height, char* w_title) { sf::RenderWindow application(sf::VideoMode(w_width,w_height), w_title); std::cout<<"started!"<<'\n'; } а конкретно в третьем аргументе. Пытался std::String тулить, но компилятор дико ругался. Мой чар, конечно, пашет, но ведь одной буквы мне недостаточно Как мне передать заголовок окна?
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 21:17 | Сообщение # 9 |
участник
Сейчас нет на сайте
| char* не обязательно указывает на один символ. Это может быть и массив.
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 21:39 | Сообщение # 10 |
старожил
Сейчас нет на сайте
| а можно ли через аргумент передать функцию? О_о
что-то вроде того: есть функция Func1. В её теле что-то написано, но это не важно А есть Func2. В качестве аргумента мы пишем Func1 и из-за этого тот кусок кода, что написан в Func1, будет "работать" в другом. void Func1() { ... } void Func2(Func1) { }
void blablabla() { blablabla_start(); Func2(); blablabla_end(); }
Как-то так хд Не могу выразиться нормально, я запутался. Просто у меня получается так, что в dll написан целый цикл для отрисовки. И мне надо определенный кусок кода поместить туда, но при этом юзер должен указать какая функция там будет выполняться
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 22:02 | Сообщение # 11 |
участник
Сейчас нет на сайте
| Можно. Гугли "указатель на функцию". Типа того: Код #include <iostream>
typedef void (*FunctionPointer)(int);
void PrintNumber(int number){ std::cout<<number<<std::endl; }
void ExecuteFuction(FunctionPointer f){ f(5); }
void main(){ ExecuteFuction(PrintNumber); }
Сообщение отредактировал RUNGOGET2THECHOPAH - Пятница, 03 Мая 2013, 22:10 |
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 22:09 | Сообщение # 12 |
старожил
Сейчас нет на сайте
| RUNGOGET2THECHOPAH, открыл учебник, понял как объявляются указатели на функции. Но не понял как этим указателем применить ту или иную функцию в другой части кода
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 22:10 | Сообщение # 13 |
участник
Сейчас нет на сайте
| Saitei, пример выше.
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 22:10 | Сообщение # 14 |
старожил
Сейчас нет на сайте
| Цитата (RUNGOGET2THECHOPAH) typedef void (*FunctionPointer)(int); извините, но я немного не пойму зачем здесь стоит typedef
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 22:15 | Сообщение # 15 |
участник
Сейчас нет на сайте
| Цитата (Saitei) зачем здесь стоит typedef Вся строчка с typedef'ом вообще не обязательна. Но без нее придется писать void ExecuteFuction(void (*f)(int)) вместо void ExecuteFuction(FunctionPointer f). Попросту говоря, так мы объявляем, что FunctionPointer - это указатель на функцию, которая ничего не возвращает и принимает один int.
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 22:33 | Сообщение # 16 |
старожил
Сейчас нет на сайте
| RUNGOGET2THECHOPAH, что-то я запутался. Сидел, лепил, а запутался. Мне нужно написать функцию (в дллке), в аргумент которой пишется другая функция(уже из самого проекта) для того чтобы вызвать функцию из проекта в коде дллки начал писать: extern "C" __declspec(dllexport) void RenderFunc(void (*FunctionPointer)(void)) { } и вдруг мозг тормознул
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 22:41 | Сообщение # 17 |
участник
Сейчас нет на сайте
| Saitei, ну вроде верно все пока. Потом в теле RenderFunc вызываешь пользовательскую функцию так: FunctionPointer().
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 22:51 | Сообщение # 18 |
старожил
Сейчас нет на сайте
| extern "C" __declspec(dllexport) void RenderFunc(void (*FunctionPointer)(void)) { RenderFunc(); }
void blabla() { RenderFunc(); } так что ли? Честно - запутался. У меня есть функция со стороны проекта: функция() { draw(id1); draw(id2); }
а со стороны dll есть функция: render() { начало рендера();
конец рендера(); }
задача приблизительно такая: render() { начало рендера(); функция(); конец рендера(); }
Нервный тик начался. Я сознаюсь, я зелён и мои познания несравнимы с вашими. Может быть это даже смешно, но и впрямь я запутался
|
|
| |
RUNGOGET2THECHOPAH | Дата: Пятница, 03 Мая 2013, 22:57 | Сообщение # 19 |
участник
Сейчас нет на сайте
| Saitei, Код DLL:
void render(void (*f)(void)) { начало рендера(); f(); конец рендера(); }
Проект:
void функция() { ... }
Как ты это дело вызываешь внутри проекта: render(функция);
|
|
| |
Saitei | Дата: Пятница, 03 Мая 2013, 23:56 | Сообщение # 20 |
старожил
Сейчас нет на сайте
| dll: Цитата extern "C" __declspec(dllexport) void RenderFunc(void (*DrawFunction)(void)) { while (application.isOpen()) { sf::Event event; while (application.pollEvent(event)) { if (event.type == Event::Closed) application.close(); } application.clear(); DrawFunction(); application.display(); } } ___.h: Цитата extern "C" __declspec(dllexport) void EngineInit(int w_width, int w_height, char* w_title, unsigned int fps_limit); extern "C" __declspec(dllexport) void RenderFunc(void (*DrawFunction)(void)); main.cpp: #include "EngineCore.h"
Код void *Draw() {
}
int main(void) { EngineInit(640,480, "vcbs", 60); RenderFunc(Draw()); return 0; }
ругань на RenderFunc(Draw());
|
|
| |