Кибор » Кибор - Интегрированная среда разработки ботов » Вопросы и решение проблем » Кибор и C/C++

Страниц (3): [1] 2 3 »
 

1. petyanka - 09 Декабря, 2023 - 15:16:00 - перейти к сообщению
Времени суток!
Могу ли использовать код написанный на C или C++ в Кибор?
Я думал о Dll, но не до конца уверен что это сработает.
И еще вопрос, если это будет Dll, смогу ли я объявлять новые значения переменным находящимся внутри dll, если да, то как?
Заранее спасибо!
2. Zireael - 09 Декабря, 2023 - 15:44:25 - перейти к сообщению
 Цитата:
Могу ли использовать код написанный на C или C++ в Кибор?

Нет. Можно переписать используя синтаксис кибор. Но, не всё можно сделать и не всегда удобно.
 Цитата:
Я думал о Dll, но не до конца уверен что это сработает.

В длл можно любой код выполнить.
 Цитата:
если это будет Dll, смогу ли я объявлять новые значения переменным находящимся внутри dll, если да, то как?

Код длл C++:
CODE:
#include "pch.h"

int X = 0;

extern "C" __declspec(dllexport)void SetValue(int NewValue)
{
X = NewValue;
}

extern "C" __declspec(dllexport)int GetValue()
{
return X;
}

Код кибор:
CODE:
external(VOID, "SetValue", "SetValue", "MyDllKib.dll");
external(INT, "GetValue", "GetValue", "yDllKib.dll");

SetValue(5);
messagebox(GetValue());
SetValue(99);
messagebox(GetValue());
3. petyanka - 09 Декабря, 2023 - 16:05:30 - перейти к сообщению
 Zireael пишет:
 Цитата:
Могу ли использовать код написанный на C или C++ в Кибор?

Нет. Можно переписать используя синтаксис кибор. Но, не всё можно сделать и не всегда удобно.
 Цитата:
Я думал о Dll, но не до конца уверен что это сработает.

В длл можно любой код выполнить.
 Цитата:
если это будет Dll, смогу ли я объявлять новые значения переменным находящимся внутри dll, если да, то как?

Код длл C++:
CODE:
#include "pch.h"

int X = 0;

extern "C" __declspec(dllexport)void SetValue(int NewValue)
{
X = NewValue;
}

extern "C" __declspec(dllexport)int GetValue()
{
return X;
}

Код кибор:
CODE:
external(VOID, "SetValue", "SetValue", "MyDllKib.dll");
external(INT, "GetValue", "GetValue", "yDllKib.dll");

SetValue(5);
messagebox(GetValue());
SetValue(99);
messagebox(GetValue());


Спасибо! Буду пробовать. Радость
4. petyanka - 11 Декабря, 2023 - 15:45:12 - перейти к сообщению
Я чего-то явно не понимаю, написал DLL, Вот часть кода:

С++ (Отобразить)


Но как только я пытаюсь присвоить новые значения для s.Text_pars, кибор просто закрывается, без каких либо ошибок. Что же я делаю не так?

Код кибора (Отобразить)
5. Zireael - 11 Декабря, 2023 - 17:32:02 - перейти к сообщению
Лучше напишите что вы хотите сделать.

Пример передачи в функцию массива int и строки:

C++ (Отобразить)

Kibor (Отобразить)
6. petyanka - 12 Декабря, 2023 - 02:14:20 - перейти к сообщению
 Zireael пишет:
Лучше напишите что вы хотите сделать.


Если в кратце, то в игре есть:
x1,y1 - координаты персонажа
x2,y2 - координаты точки куда мне нужно бежать
azimuth - азимут куда я смотрю
Что я хочу сделать?
Написать Dll, которая будет универсальной для любой игры, где есть эти значения
Как я это реализовал? Вот код
C++ (Отобразить)

Если в кратце, Dll принимает текст в string от кибора, дальше разбирает этот текст на переменные в формате x1,y1,x2,y2,azimuth . Потом вызываются функции, которые считают угол поворота камеры в игре.
На выходе, кибор получает x1,y1,x2,y2,azimuth,angle_deg (x1,y1,x2,y2 - не обязательно получать в финальной версии, это скорее для проверки что длл исправно работает)
7. Zireael - 12 Декабря, 2023 - 03:21:35 - перейти к сообщению
А зачем передавать параметры строкой и потом разбирать её?
Так не проще?:
C++ (Отобразить)

Kibor (Отобразить)
8. petyanka - 12 Декабря, 2023 - 04:40:44 - перейти к сообщению
 Zireael пишет:
А зачем передавать параметры строкой и потом разбирать её?
Так не проще?


Значительно проще, спасибо за помощь, потратил 2 дня чтобы тот код написать, а в итоге вы в 30 строк уместили мои 150, еще и глаза открыли, как все это может работать.
Огромное спасибо!
9. resident - 12 Декабря, 2023 - 07:23:23 - перейти к сообщению
А зачем тут вообще С++, кибор считать разучился?
CODE:

if(535-yy[0]!=0) koef=(xx[0]-640)/(yy[0]-535)*-1; // коэф прямой
else koef=999;
angle=asin(koef/sqrt(1+pow(koef,2))); // угол
10. sedoi - 12 Декабря, 2023 - 13:17:33 - перейти к сообщению
 Zireael пишет:
А зачем передавать параметры строкой и потом разбирать её?
Так не проще?:
C++ (Отобразить)

Kibor (Отобразить)

Добрый вечер, а как её использовать? создал текстовый документ вставил этот код в него, назвал MyDllKib и сменил расширение на dll закинул рядом с кибором в папку ,в киборе ввёл вызов функций те что ниже описаны. пишет что MyDllKib.dll не подключен, что я не так сделал?

Powered by ExBB FM 1.0 Final