Tech Support Forum banner
Status
Not open for further replies.

Fatal error

1K views 7 replies 2 participants last post by  Ninjaboi 
#1 ·
Every time i compile this thing i got this
fatal error LNK1169: one or more multiply defined symbols found

is the problem is the header .h? or just me trying to re-code this code

Code:
// Test v1.cpp : Defines the exported functions for the DLL application.
//

#include "stdafx.h"
//includes all nessecary files to this source
#include <windows.h>
//End of includes
//This is what you call globals.
int TestOn = 0;
//Define HackOn as a number, and that numebr is zero.
int TestMax = 10;
//Define HackMax as a number, and that number is ten.
bool test = false;
//Define test as a true/false. "Boolean"
#define ADDR_SBULLLETS			0x374BBF16 
//The definition of ADDR_SBULLETS
//End of Globals
void Main (void)
{
	while(1)
		//Makes an infinite loop. One that doesn't end.
	{
		if(GetAsyncKeyState(VK_NUMPAD1)&1)
			//When Numpad1 Gets Pressed
		{
			test = (!test);
			//if test = false, turn to true and vice versa
		}
		if(GetAsyncKeyState(VK_NUMPAD2)&1)
			//When Numpad2 Gets Pressed.
		{
			TestOn ++;
			//Adds +1 to the variable, "HackOn"
			if(TestOn == TestMax) TestOn = 0;
			//When Hackon Reaches the number HackMax, it resets HackOn to 0
		}
		if(test)
			//if test is true
		{
			memcpy( (PBYTE)ADDR_SBULLLETS, (PBYTE)"\x33\xC0\x90", 3 );
			//look in globals for the definition of ADDR_SBULLETS
			//Basically, it edits the bytes of the memory to "\x33\xC0\x90".
			//The number at the end, tells you how many bytes you are editing.
			//The first part, ADDR_SBULLETS Shows the code which part of the memory we are editing.
		}else{
			//if test is not true
			memcpy(  (PBYTE)ADDR_SBULLLETS, (PBYTE)"\x0F\x94\xC0", 3 );
			//look in globals for the definition of ADDR_SBULLETS
			//Basically, it edits the bytes of the memory to "\x0F\x94\xC0".
			//The number at the end, tells you how many bytes you are editing.
			//The first part, ADDR_SBULLETS Shows the code which part of the memory we are editing.
		}
	}
}
DWORD WINAPI Lesson (LPVOID)
// This is just a dummy function that will be the code activate the main thread
{	
	Main();
	//Call the thread called Main
	return 1;
	//Finish of the thread.
}

BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
// DllMain is an optional function for you to declare.
// It serves as the entry point for any DLL
{
	DisableThreadLibraryCalls(hDll);
	// Make a call to DisableThreadLibraryCalls with the hModule variable
	// as its argument; Doing this is an optimization trick to prevent
	// needless thread attach/detach messages from triggering further calls
	// to our DllMain function.
	if ( dwReason == DLL_PROCESS_ATTACH )
	{
		//When this dll is injected into the process. this is what the dll is supposed to do.
		// Null, in C Plus Plus, nothing. It is defined as 0
		CreateThread(NULL, NULL, Lesson, NULL, NULL, NULL);
		//It creates the thread called "Lesson" which is defined a few lines up. DWORD WINAPI Lesson (LPVOID)
	}
return TRUE;
// Although the return value doesn't actually matter. You return the value TRUE or FALSE indicatinng success or failure.

}
 
See less See more
#2 · (Edited)
You shouldn't have main set to not return ( void ). Instead, you should try to make it return 'int'. You also capitalized 'main' in both your declaration of the function, as well as in DWORD WINAPI Lesson(). Lower-casing the declaration in line 18 as well as line 58, and making main return an integer, should fix your problem.

Hope that works :grin:.

EDIT: If that doesn't work, you should try commenting out line 4 ( as I did that when I was working with your code as well ).
 
#6 ·
Code:
// Test v1.cpp : Defines the exported functions for the DLL application.
//

//#include "stdafx.h"
//includes all nessecary files to this source
#include <windows.h>
//End of includes
//This is what you call globals.
int TestOn = 0;
//Define HackOn as a number, and that numebr is zero.
int TestMax = 10;
//Define HackMax as a number, and that number is ten.
bool test = false;
//Define test as a true/false. "Boolean"
#define ADDR_SBULLLETS            0x374BBF16 
//The definition of ADDR_SBULLETS
//End of Globals
int main()
{
    while(1)
        //Makes an infinite loop. One that doesn't end.
    {
        if(GetAsyncKeyState(VK_NUMPAD1)&1)
            //When Numpad1 Gets Pressed
        {
            test = (!test);
            //if test = false, turn to true and vice versa
        }
        if(GetAsyncKeyState(VK_NUMPAD2)&1)
            //When Numpad2 Gets Pressed.
        {
            TestOn ++;
            //Adds +1 to the variable, "HackOn"
            if(TestOn == TestMax) TestOn = 0;
            //When Hackon Reaches the number HackMax, it resets HackOn to 0
        }
        if(test)
            //if test is true
        {
            memcpy( (PBYTE)ADDR_SBULLLETS, (PBYTE)"\x33\xC0\x90", 3 );
            //look in globals for the definition of ADDR_SBULLETS
            //Basically, it edits the bytes of the memory to "\x33\xC0\x90".
            //The number at the end, tells you how many bytes you are editing.
            //The first part, ADDR_SBULLETS Shows the code which part of the memory we are editing.
        }else{
            //if test is not true
            memcpy(  (PBYTE)ADDR_SBULLLETS, (PBYTE)"\x0F\x94\xC0", 3 );
            //look in globals for the definition of ADDR_SBULLETS
            //Basically, it edits the bytes of the memory to "\x0F\x94\xC0".
            //The number at the end, tells you how many bytes you are editing.
            //The first part, ADDR_SBULLETS Shows the code which part of the memory we are editing.
        }
    }
}
DWORD WINAPI Lesson (LPVOID)
// This is just a dummy function that will be the code activate the main thread
{    
    main();
    //Call the thread called Main
    return 1;
    //Finish of the thread.
}

BOOL WINAPI DllMain ( HMODULE hDll, DWORD dwReason, LPVOID lpReserved )
// DllMain is an optional function for you to declare.
// It serves as the entry point for any DLL
{
    DisableThreadLibraryCalls(hDll);
    // Make a call to DisableThreadLibraryCalls with the hModule variable
    // as its argument; Doing this is an optimization trick to prevent
    // needless thread attach/detach messages from triggering further calls
    // to our DllMain function.
    if ( dwReason == DLL_PROCESS_ATTACH )
    {
        //When this dll is injected into the process. this is what the dll is supposed to do.
        // Null, in C Plus Plus, nothing. It is defined as 0
        CreateThread(NULL, NULL, Lesson, NULL, NULL, NULL);
        //It creates the thread called "Lesson" which is defined a few lines up. DWORD WINAPI Lesson (LPVOID)
    }
return TRUE;
// Although the return value doesn't actually matter. You return the value TRUE or FALSE indicatinng success or failure.

}
That's actually what I meant :grin:.
 
#7 · (Edited)
Hahaha i did that. like you said let me try and re-compile it

Edit: I got the same error

Code:
1>Test v1.obj : error LNK2005: _DllMain@12 already defined in dllmain.obj
1>C:\Documents and Settings\Intel\My Documents\Visual Studio 2010\Projects\Test v1\Debug\Test v1.dll : fatal error LNK1169: one or more multiply defined symbols found
 
#8 ·
It seems your defining DLLMain() in your Test v1 file, when it's already defined in dllmain. This means that MFC already defines this for you, and that you should either remove DLLMain() from your source entirely, or that you should remove MFC from your project.

Don't worry if you choose the latter though, as since it's already defined in MFC you can still call and use it just like normal. If your wanting to edit the function itself though, possibly just renaming the custom function would prevent conflicting with the original.
 
Status
Not open for further replies.
You have insufficient privileges to reply here.
Top