PDA

View Full Version : [SUPORTE] Erro ao compilar câmera 3D



Stark
29/04/2020, 02:12 PM
Salve galera, boa tarde!

Encontrei a source de uma câmera 3D 97D e estou tentando compilar em um main.

Porém, ao compilar, dá o seguinte erro:
Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão
Erro C2382 'abs': redefinição; especificações de exceção diferentes Customs d:\mu\sources\97d files\97d files\source 97d\customs main\customs\camera.cpp 21

Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão
Erro C2264 'abs': erro na definição ou na declaração da função; função não chamada Customs d:\mu\sources\97d files\97d files\source 97d\customs main\customs\camera.cpp 108

Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão
Erro C2264 'abs': erro na definição ou na declaração da função; função não chamada Customs d:\mu\sources\97d files\97d files\source 97d\customs main\customs\camera.cpp 128

Gravidade Código Descrição Projeto Arquivo Linha Estado de Supressão
Erro C2264 'abs': erro na definição ou na declaração da função; função não chamada Customs d:\mu\sources\97d files\97d files\source 97d\customs main\customs\camera.cpp 189






Segue a source:

Camera.cpp


#include "StdAfx.h"

// InGame - Keyboard procedure
int iabs ( int var )
{
int retval;

__asm
{
MOV EAX , var
CMP EAX , 0
JGE notsign
NEG EAX
notsign:
MOV retval , EAX
}

return retval;
}

float abs ( float var )
{
float retval;

__asm
{
FLD var
FABS
FSTP retval
}

return retval;
}

int KeysProc ()
{
int F7State = GetAsyncKeyState(VK_F7);

if (F7Pressed == false)
{
if ( F7State != 0 && PushF7 == false)
{
PushF7 = true;
F7Pressed = true;
}
else if ( F7State != 0 && PushF7 == true)
{
PushF7 = false;
F7Pressed = true;
}
}

if ( F7State == 0) F7Pressed = false;

return 1;
}

// InGame - 3D Camera procedure
int CameraProc ()
{
POINT tp;
GetCursorPos( &tp );
int mx = (tp.x * 639) / *Screen_W;
int my = (tp.y * 479) / *Screen_H;

// ================================================== =================
// Lewo / Prawo
// ================================================== =================
if (PushF7 == true)
{
if (mx < 636 && mx > 2)
{
if (RotSpeed < 0) RotSpeed = RotSpeed + 0.4f;
if (RotSpeed > 0) RotSpeed = RotSpeed - 0.4f;
if (RotSpeed > 0 && RotSpeed < 0.2) RotSpeed = 0;
if (RotSpeed < 0 && RotSpeed > -0.2) RotSpeed = 0;
}

if (mx > 636)
{
RotSpeed = RotSpeed + 0.4f;
}

if (mx < 2)
{
RotSpeed = RotSpeed - 0.4f;
}

if (RotSpeed > 5) RotSpeed = 5;
if (RotSpeed < -5) RotSpeed = -5;

*Camera_RotZ += RotSpeed;
if (*Camera_RotZ < -405) *Camera_RotZ = -45;
if (*Camera_RotZ > 315) *Camera_RotZ = -45;

//if (RotSpeed < 0) DrawBox(630,0,10,432,0,100,0,fabs(RotSpeed) * 10);
//if (RotSpeed > 0) DrawBox(0,0,10,432,0,100,0,fabs(RotSpeed) * 10);

// ================================================== =================
// Góra / Dó³
// ================================================== =================

if (my > 470)
{
if (*Camera_RotY < 90)
{
*Camera_PosZ += 20;
*Camera_RotY += abs((*Camera_PosZ + 330) / 640);
if (*Camera_RotY < 60 || *Camera_RotY > 40)
{
AddX += 20;
AddY += 20;
}
else
{
AddX -= 20;
AddY -= 20;
}
}
}


if (my < 10)
{
if (*Camera_RotY > 25)
{
*Camera_PosZ -= 20;
*Camera_RotY -= abs((*Camera_PosZ + 330) / 600);
if (*Camera_RotY < 60 || *Camera_RotY > 40)
{
AddX += 20;
AddY += 20;
}
else
{
AddX -= 20;
AddY -= 20;
}
}
}




if ( GetAsyncKeyState(VK_HOME) != 0 )
{
if ( *Camera_Zoom > 0 )
{
*Camera_Zoom -= 1;
if ( AddX > 0 && AddY > 0)
{
AddX -= 100;
AddY -= 100;
}
}
}

if ( GetAsyncKeyState(VK_END) != 0 )
{
if ( *Camera_Zoom < 60 )
{
*Camera_Zoom += 1;
AddX += 100;
AddY += 100;
}
}

if ( GetAsyncKeyState(VK_F9) != 0)
{
*Camera_RotZ = -45;
*Camera_RotY = 48.5;
*Camera_PosZ = 150;
*Camera_ClipX = 1190;
*Camera_TLeft = 1500;
*Camera_TRight = 1500;
*Camera_BLeft = -1500;
*Camera_BRight = -1500;
*Camera_Zoom = 35;
AddX = 0;
AddY = 0;
}


*Camera_TLeft = 1500 + AddX;
*Camera_TRight = 1500 + AddX;
*Camera_BLeft = -1500 - AddX;
*Camera_BRight = -1500 - AddX;

*Camera_ClipX = 1190 + (abs(*Camera_PosZ - 150) * 3) + AddX + 800;
*Camera_GlClip = 3000;
}

return 1;
}

DWORD __stdcall MainProc (PVOID pVoid)
{
while(1)
{
KeysProc();
CameraProc();
Sleep( 20 );
}

return 1;
}

extern "C" _declspec(dllexport) int Init ()
{
DWORD ThreadID;
HANDLE MyThread = CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE) MainProc , 0 , 0 , &ThreadID );

if ( MyThread == NULL )
{
MessageBox( 0 , "Cannot create Thread!" , "ERROR" , MB_OK + MB_ICONERROR );
return 0;
}

return 1;
}

DWORD __stdcall main( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
return 1;
}

Camera.h


#ifdef MY9988_DLL_EXPORTS
#define EXPORT __declspec(dllexport)
char main_hook[30] = {0x44 , 0x47 , 0x45 , 0x20 , 0x73 , 0x6F , 0x62 , 0x69 , 0x65 , 0x68 , 0x20 , 0x28 , 0x73 , 0x6F , 0x62 , 0x69 , 0x65 , 0x68 , 0x40 , 0x67 , 0x6D , 0x61 , 0x69 , 0x6C , 0x2E , 0x63 , 0x6F , 0x6D , 0x29};
char author[22] = "[Only registered and activated users can see links]";
#else
#define EXPORT __declspec(dllimport)
#endif

#include <windows.h>
#define __fltused 1

#pragma comment( lib , "crtdll.lib" )
#pragma comment( lib , "libcmt.lib" )
#pragma comment( lib , "libc.lib" )
#pragma comment(lib, "libcp.lib")

#pragma comment( linker , "/entry:main" )

HANDLE MeHandle;

float AddY , AddX;
bool F7Pressed , PushF7 , F10Pressed , PushF10;
float RotSpeed = 0;

//0.97d Camera Offsets
float *Camera_Zoom = (float*) 0x51F7F1;
float *Camera_PosZ = (float*) 0x54D970;
float *Camera_RotZ = (float*) 0x88A35E0;
float *Camera_RotY = (float*) 0x54DD4C;

float *Camera_TLeft = (float*) 0x4F4468;
float *Camera_TRight = (float*) 0x4F447E;
float *Camera_BLeft = (float*) 0x4F448E;
float *Camera_BRight = (float*) 0x4F449E;
float *Camera_ClipX = (float*) 0x54DCB0;
float *Camera_GlClip = (float*) 0x51F862;

DWORD *Screen_W = (DWORD*) 0x55C4EC;
DWORD *Screen_H = (DWORD*) 0x55C4F0;

No StdAfx.h foi incluído:
#include "Camera.h";

Alguma luz?

Ravoc
29/04/2020, 06:42 PM
Boa noite, quando se á qualquer erro em projetos o visual studio fala qual erro está acontecendo para você ir atrás de ajuda, ou saber oque mais ou menos está acontecendo, o erro C2264, significa que está dando erro na função ou declaração 'ABS'.

Abaixo um exemplo retirado da guia de ajuda Microsoft. Agora creio que é só rever está função 'ABS' recrie a função.
'função': erro na definição ou declaração da função; função não chamada
A função não pode ser chamada devido a uma definição ou declaração incorreta.
A seguinte amostra gera C2264: