[C++] Erreur LNK 2019!

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Status
Not open for further replies.

moi4567

Membre
Dec 18, 2012
72
1
434
hl2.exe
Hello :)

Je suis en train de me faire un bibliothèque avec des class histoire de me simplifier la vie pour après et je me prend l'erreur LNK2019. J'ai cherché et il semblerait que ça soit un problème de "link" mais je n'ai pas trouvé la solution pour autant :/

Voici mes différents fichiers:
Code:
#include <Windows.h>
#include <iostream>
#include "process.h"

using namespace std;

/* ===== Declaration ===== */

const string process::name = "hl2.exe"; // Define process name

int main()
{
	process hl2;

	cout << "Wait process :	" << hl2.name << endl;
	cout << hex << hl2.GetProcessID() << endl;
	while (!hl2.running())
		Sleep(1000);


	system("PAUSE");
	return 0;
}
Code:
#ifndef PROCESS_H_INCLUDED
#define PROCESS_H_INCLUDED

#include <Windows.h>
#include <string>

class process
{
public:

	// Attributs
	static const std::string name;

	// Methods
	bool running(const char* name = name.c_str());					  // Check process running
	static int GetProcessID(char* ProcessName = (char*)name.c_str()); // Process ID
	HANDLE GetProcessHandle(int ProcessID = GetProcessID());		  // Process Handle

private:
	//Attributs

};


#endif // PROCESS_H_INCLUDED
Code:
#include "process.h"
#include <TlHelp32.h> // Usefull for ProcessRunning()

bool process::running(const char* name) // Check process running (0 = Not running, 1 = Running)
{
	HANDLE SnapShot = CreateToolhelp32Snapshot(0x00000002, 0);

	if (SnapShot == INVALID_HANDLE_VALUE)
		return false;

	PROCESSENTRY32 procEntry;
	procEntry.dwSize = sizeof(PROCESSENTRY32);

	if (!Process32First(SnapShot, &procEntry))
		return false;

	do
	{
		if (strcmp(procEntry.szExeFile, name) == 0)
			return true;
	} while (Process32Next(SnapShot, &procEntry));

	return false;
}

int GetProcessID(char* ProcessName) // Get ID of process
{
	PROCESSENTRY32   pe32;
	HANDLE         hprocess = NULL;

	pe32.dwSize = sizeof(PROCESSENTRY32);
	hprocess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

	if (Process32First(hprocess, &pe32))
	{
		do
		{
			if (strcmp(pe32.szExeFile, ProcessName) == 0)
				break;
		} while (Process32Next(hprocess, &pe32));
	}
	if (hprocess != INVALID_HANDLE_VALUE)
		CloseHandle(hprocess);

	return pe32.th32ProcessID;
}

HANDLE GetProcessHandle(int ProcessID) // Get Handle of process
{
	HANDLE result = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
	CloseHandle(result);
	return result;
}
Et voici donc le fameux message d'erreur, LNK2019.
Code:
1>main.obj : error LNK2019: unresolved external symbol "public: static int __cdecl process::GetProcessID(char *)" (?GetProcessID@process@@SAHPAD@Z) referenced in function _main

Lorsque j'utilise la fonction running de la class process par exemple, je n'ai pas de soucis. En revanche avec les fonction GetProcessID et GetProcessHandle, j'ai le problème, même si je les utilisent à l’intérieur de la class.

Je bloque là-dessus depuis hier et là j'ai plus trop d'idées. Si vous avez déjà rencontré cette erreur, je veux bien :hap:

Merci d'avance ;)
 

ragnarock

Membre actif
Mar 22, 2010
194
0
917
Salut,

T'as oublié de préciser la classe à laquelle appartiennent ces méthodes, donc le linker ne trouve pas l'implémentation de la méthode déclarée dans le header.

Dans ton process.cpp faut rajouter :
Code:
int [COLOR="Red"]process::[/COLOR]GetProcessID(char* ProcessName) // Get ID of process
Et pareil pour l'autre méthode.
 

moi4567

Membre
Dec 18, 2012
72
1
434
hl2.exe
Effectivement, c'étais bien ça je suis complètement passé à côté... Le pire c'est que je l'ai fait pour la méthode running. Halala, faut que je me concentre mieux que ça :arf:

Merci beaucoup en tous cas ;)
 
Status
Not open for further replies.