PDA

Просмотр полной версии : [Вопрос] Ошибки или мои косяки Pawn + C++



KrutoyKrosch
11.11.2017, 10:44
Была ошибка в amx.h


typedef short int int16_t;
typedef unsigned short int uint16_t;

Исправил добавив в начало



#define HAVE_STDINT_H


Потом был краш, который я исправил заменив в

#define AMXAPI __cdecl
на

#define AMXAPI _stdcall

Но теперь функции amxfloat.c и amxcore.c не хотят регаться.



if (aux_LoadProgram(&amx, "data/script/test.amx", NULL) != AMX_ERR_NONE)
return 0;

if (amx_CoreInit(&amx) != AMX_ERR_NONE) // core - тоже не хотят
return -1;

if (amx_FloatInit(&amx) != AMX_ERR_NONE) // и это тоже не хочет
return -2;

if (amx_Register(&amx, mNatives, -1) != AMX_ERR_NONE) // мои функции нормально регаются
return -3;


В Pawn все подключено.



#include <core>
#include <float>

native SetCameraPos(Float:x, Float:y, Float:z, Float:x_at, Float:y_at, Float:z_at);

main()
{
return 0;
}

@GameEngineInit();
@GameEngineInit()
{
SetCameraPos(10.0, 10.0, 10.0, 0.0, 0.0, 100.0);
}


В чем проблема?

KrutoyKrosch
11.11.2017, 12:16
Какое-то странное решение проблемы нашел... Поменять местами регистрацию функций... Вроде работает

пока не закрывайте, может еще накосячу где

Daniel_Cortez
11.11.2017, 13:53
Вместо того, чтобы городить костыли, освойте CMake (он вам в любом случае пригодитя, если вы хотите, чтобы игровой движок был мультиплатформенным) и используйте Pawn 3.2 (+) (http://pro-pawn.ru/showthread.php?15495-Pawn-3-2-%28-%29) - этот форк был создан специально для того, чтобы упростить задачу по встраиванию интерпретатора в приложения.

KrutoyKrosch
11.11.2017, 15:03
Вместо того, чтобы городить костыли, освойте CMake (он вам в любом случае пригодитя, если вы хотите, чтобы игровой движок был мультиплатформенным) и используйте Pawn 3.2 (+) (http://pro-pawn.ru/showthread.php?15495-Pawn-3-2-%28-%29) - этот форк был создан специально для того, чтобы упростить задачу по встраиванию интерпретатора в приложения.

А что делает CMake? Что дает на выходе? Просто я пытался сделать все как написано в документации на оф сайте Pawn, но чет ошибок много было и разбираться не хотелось.

И в чем костыльность кода который сейчас?

Daniel_Cortez
11.11.2017, 20:23
А что делает CMake? Что дает на выходе? Просто я пытался сделать все как написано в документации на оф сайте Pawn, но чет ошибок много было и разбираться не хотелось.
https://ru.wikipedia.org/wiki/CMake
+ ещё кучу уроков (в т.ч. на русском языке) можно найти, воспользовавшись гуглом.



И в чем костыльность кода который сейчас?
В том, что для одной лишь компиляции вам приходится лезть в чужой код?


Исправил добавив в начало



#define HAVE_STDINT_H


Потом был краш, который я исправил заменив в

#define AMXAPI __cdecl
на

#define AMXAPI _stdcall

Если для вас это не костыль, то я не знаю...

KrutoyKrosch
11.11.2017, 20:54
Ну про этот костыль написано даже на оф сайте Pawn. Где создатель пишет что если что-то не работает замените на _stdcall, правда я не сразу это заметил. А #define HAVE_STDINT_H пришлось добавить из-за его каких-то странных проверок на компилятор...

Daniel_Cortez
11.11.2017, 21:20
Ну про этот костыль написано даже на оф сайте Pawn. Где создатель пишет что если что-то не работает замените на _stdcall, правда я не сразу это заметил.
Если вы про этот (https://github.com/compuphase/pawn/blob/master/readme.txt#L148) текст, то там ни слова о редактировании исходников, а сказано, что нужно либо объявлять макросы AMX_NATIVE_CALL и AMXAPI в своём коде до подключения amx.h, либо добавлять их в аргументы командной строки для компилятора (именно это и делает CMake в моём форке, ссылка на который указана в посте выше).



А #define HAVE_STDINT_H пришлось добавить из-за его каких-то странных проверок на компилятор...
Чего тоже не пришлось бы делать, умей вы пользоваться CMake.