Пятница, 29 Марта 2024, 08:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Форум игроделов » Программирование » C/C++ » SFML
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 тулить, но компилятор дико ругался. Мой чар, конечно, пашет, но ведь одной буквы мне недостаточно biggrin
Как мне передать заголовок окна?
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();
}
так что ли? wacko
Честно - запутался.
У меня есть функция со стороны проекта:
функция()
{
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());
Форум игроделов » Программирование » C/C++ » SFML
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг