此代码将从 OS 读取正在运行的进程并显示它 (C++)。具体来说,这里的操作系统是Windows XP。问题(错误)在(我认为)原型(prototype)中。顺便说一句,它显示以下错误。
错误 1:错误 LNK2019:函数 _main 中引用了未解析的外部符号 _EnumProcesses@12
错误 2:错误 LNK2019:函数“void __cdecl DisplayProcessNameAndID(unsigned long)”(?DisplayProcessNameAndID@@YAXK@Z) 中引用的未解析外部符号 _GetModuleBaseNameA@16
错误 3:错误 LNK2019:函数“void __cdecl DisplayProcessNameAndID(unsigned long)”(?DisplayProcessNameAndID@@YAXK@Z) 中引用的未解析外部符号 _EnumProcessModules@16
错误 4: fatal error LNK1120:3 个 Unresolved external C:\Documents and Settings\Windows\My Documents\Visual Studio 2008\Projects\a\Debug\a.exe
#include <afxwin.h>
#include <iostream>
#include <string.h>
#include "psapi.h"
unsigned int i;
using namespace std;
void DisplayProcessNameAndID(DWORD processID);
void main()
{
DWORD aProcesses[1024], cbNeeded, cProcesses;
if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
return;
cProcesses = cbNeeded / sizeof(DWORD);
for ( i = 0; i < cProcesses; i++ )
{
if( aProcesses[i] != 0 )
DisplayProcessNameAndID( aProcesses[i] );
}
};
void DisplayProcessNameAndID( DWORD processID )
{
TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");
HANDLE hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID ) ;`
if (NULL != hProcess )
{
HMODULE hMod;
DWORD cbNeeded;
if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), &cbNeeded) )
{
GetModuleBaseName( hProcess, hMod, szProcessName,
sizeof(szProcessName)/sizeof(TCHAR) );
}
};
CString str;
str.Format("Text:%s, PID : %u", szProcessName, processID );
AfxMessageBox(str);
CloseHandle( hProcess );
}
最佳答案
不,您的问题不在于原型(prototype) - windows.h 中的原型(prototype)很好。如果您注意到错误消息以 LNK
开头,这意味着 linker给出了错误。这意味着链接器无法找到这些函数。
如果您查看出现错误的函数之一的文档,EnumProcessModules在 Library
部分的最底部,您会看到在 Windows XP 上它需要链接到 Psapi.lib
。默认情况下,Visual C++ 不会链接到该库,就像它为 Kernel32.lib
所做的那样,这就是为什么在该库中定义的任何函数都可以正常工作的原因。
您可以将 Psapi.lib
添加到项目的 Additional Libraries
部分,或者只添加以下行:
#pragma comment(lib, "Psapi.lib")
到文件的顶部,它将指示链接器使用 Psapi.lib。
关于c++ - 从OS读取正在运行的进程并通过C++显示!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20720748/