0

次のようになります。

error LNK2005: "unsigned long __cdecl GetModuleBase(void *,
class std::basic_string<char,struct std::char_traits<char>,
class std::allocator<char> > &)" 
(?GetModuleBase@@YAKPAXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@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 はそのような静的ライブラリが見つからないと言っています。

4

2 に答える 2

4

名前空間にはGetModuleBase機能Microsoft::WRLがあります。

あなたのコードには Microsoft の機能が含まれているため (プロジェクトの別の部分では内部的なものです)、リンク段階でエラーが発生します。

関数の名前を変更するか、ネームスペースを使用してください。

于 2013-10-02T13:27:32.757 に答える