Linking Error...



  • Hi ...

    ich bekomme folgende fehlermeldungen:

    >Engine.obj : error LNK2005: "enum qboolean CamIsFree" (?CamIsFree@@3W4qboolean@@A) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Trace)(struct trace_t *,float * const,float * const,float * const,float * const,int,int)" (?GS_Trace@@3P6AXPAUtrace_t@@QAM111HH@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Error)(char const *,...)" (?GS_Error@@3P6AXPBDZZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "int (__cdecl* GS_PointContents)(float * const)" (?GS_PointContents@@3P6AHQAM@ZA) ist bereits in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Free)(void *)" (?GS_Free@@3P6AXPAX@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void * (__cdecl* GS_Malloc)(unsigned int)" (?GS_Malloc@@3P6APAXI@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Printf)(char const *,...)" (?GS_Printf@@3P6AXPBDZZA) is already in DllMain.obj definiert.
    

    Hier mein Projekt:

    Common.h:

    #ifndef _COMMON_H_
    #define _COMMON_H_
    
    //----------Libs----------
    #pragma comment ( lib , "opengl32.lib" )
    #pragma comment ( lib , "gdi32.lib" )
    
    //--------Defines---------
    #define HACK_VERSION "beta"
    
    //--------Commons---------
    #include <windows.h>
    #include <math.h>
    #include <fstream>
    #include <vector>
    #include <stdio.h>
    #include <stdarg.h>
    #include <gl/gl.h>
    #include <time.h>
    
    //----------SDK-----------
    #include "SDK/cgame/cg_local.h"
    
    //---------Detours--------
    #include "detours.h"
    
    //---------NeoHook--------
    #include "Engine.h"
    
    #endif // _COMMON_H_
    

    DllMain.cpp:

    #include "Common.h"
    
    FARPROC (WINAPI *pGetProcAddress)(HMODULE hModule, LPCSTR lpProcName);
    FARPROC WINAPI oGetProcAddress(HMODULE hModule, LPCSTR lpProcName)
    {
    	FARPROC result = pGetProcAddress(hModule, lpProcName);
    	if(HIWORD(lpProcName) && strstr(lpProcName, "GetCGameAPI"))
    	{
    		pGetCGameAPI = (cgame_export_t *(__cdecl *)(cgame_import_t *))result;
    		return (FARPROC)&oGetCGameAPI;
    	}
    	return result;
    }
    
    int WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
    {
    	if( dwReason == DLL_PROCESS_ATTACH )
    	{
    		pGetProcAddress = (FARPROC (__stdcall *)(HMODULE,LPCSTR))DetourFunction((PBYTE)GetProcAddress, (PBYTE)oGetProcAddress);
    	}
    
    	else if ( dwReason == DLL_PROCESS_DETACH )
    	{
    		DetourRemove( (PBYTE)GetProcAddress, (PBYTE)oGetProcAddress );
    	}
    
    	return( true );
    }
    

    Engine.h:

    #ifndef _ENGINE_H_
    #define _ENGINE_H_
    
    extern cgame_export_t *(*pGetCGameAPI)( cgame_import_t *import );
    extern cgame_export_t *oGetCGameAPI( cgame_import_t *import );
    
    #endif // _ENGINE_H_
    

    Engine.cpp:

    #include "Common.h"
    
    cgame_export_t *(*pGetCGameAPI)( cgame_import_t *import );
    cgame_export_t *oGetCGameAPI( cgame_import_t *import );
    
    //----------Functionen----------
    cgame_export_t *oGetCGameAPI( cgame_import_t *import )
    {
    	return &*pGetCGameAPI(import);
    }
    

    Hab das Ganze zuvor in einer datei gehabt was ich sehr unordentlich fand und wollts jetzt ein bisschen aufteilen
    ich weiß nicht warum sich der da immer aufregt ich hab immer #ifndef abgefragt also das was man eigentlich braucht damit etwas nicht 2 mal eingebunden wird....

    könnt ihr mir helfen?

    Mfg
    Flario2



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Compiler- und IDE-Forum verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • >Engine.obj : error LNK2005: "enum qboolean CamIsFree" (?CamIsFree@@3W4qboolean@@A) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Trace)(struct trace_t *,float * const,float * const,float * const,float * const,int,int)" (?GS_Trace@@3P6AXPAUtrace_t@@QAM111HH@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Error)(char const *,...)" (?GS_Error@@3P6AXPBDZZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "int (__cdecl* GS_PointContents)(float * const)" (?GS_PointContents@@3P6AHQAM@ZA) ist bereits in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Free)(void *)" (?GS_Free@@3P6AXPAX@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void * (__cdecl* GS_Malloc)(unsigned int)" (?GS_Malloc@@3P6APAXI@ZA) is already in DllMain.obj definiert.
    1>Engine.obj : error LNK2005: "void (__cdecl* GS_Printf)(char const *,...)" (?GS_Printf@@3P6AXPBDZZA) is already in DllMain.obj definiert.
    

    Hmm, komisch. Ein Compiler der Denglisch kann.

    In der Datei Engine.cpp fehlt mal noch ein #include "Engine.h". Sonst kann ich kein Fehler entdecken. Es könnte aber gut möglich sein dass die Link-Pfade nicht stimmen. Also überprüfe diese.

    Hat das Ganze schon funktioniert als es noch eine Datei war ??


Anmelden zum Antworten