Просмотр полной версии : [Вопрос] Ошибки или мои косяки 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.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot