它看起來像這樣:編譯錯誤「已定義」
error LNK2005: "unsigned long __cdecl GetModuleBase(void *,
class std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> > &)"
([email protected]@[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@@Z)
already defined
和代碼我最近說:
#include "Windows.h"
#include <TlHelp32.h>
#include <psapi.h>
#include <string>
#pragma comment(lib, "psapi")
//#pragma comment(lib, "TlHelp32") i could not find where this lib located
using namespace std;
DWORD GetModuleBase(HANDLE hProc, string &sModuleName)
{
HMODULE *hModules;
char szBuf[50];
DWORD cModules;
DWORD dwBase = -1;
//------
EnumProcessModules(hProc, hModules, 0, &cModules);
hModules = new HMODULE[cModules/sizeof(HMODULE)];
if(EnumProcessModules(hProc, hModules, cModules/sizeof(HMODULE), &cModules)) {
for(int i = 0; i < cModules/sizeof(HMODULE); i++) {
if(GetModuleBaseName(hProc, hModules[i], szBuf, sizeof(szBuf))) {
if(sModuleName.compare(szBuf) == 0) {
dwBase = (DWORD)hModules[i];
break;
}
}
}
}
delete[] hModules;
return dwBase;
}
我不明白這是什麼,也許是我錯了使用代碼? 或者需要TlHelp32.lib,但是VS說它找不到這樣的靜態庫。
你的標題是否用'#ifndef'宏守護? –
當然不是雜注。 – Loryan55
這是一個鏈接錯誤,而不是編譯器錯誤。它表明你有兩個名爲'GetModuleBase'的函數具有相同的簽名。也許你連接兩次相同的代碼? –