【发布时间】:2015-07-15 21:26:00
【问题描述】:
我尝试用 C++ 创建一个小项目。我的程序应该能够读取 Windows 中当前正在运行的进程,并每 5 分钟将有关进程的信息发送到我的私有 MySQL 数据库。在这段时间内,我可以阅读流程。
见下面的代码:
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
bool getAllProcesses(void);
int main(void){
getAllProcesses();
}
bool getAllProcesses(){
HANDLE WINAPI snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
LPPROCESSENTRY32 pe32;
Process32First(snapshot, pe32);
while(Process32Next(snapshot, pe32)){
std::cout << pe32->szExeFile << "\n";
}
std::cout << "End of list";
CloseHandle( snapshot );
return true;
}
上面的代码运行良好。
但如果我添加代码“int i;i=1;”像这样:
#include <stdio.h>
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
bool getAllProcesses(void);
int main(void){
getAllProcesses();
}
bool getAllProcesses(){
int i;
i=0;
HANDLE WINAPI snapshot = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
LPPROCESSENTRY32 pe32;
Process32First(snapshot, pe32);
while(Process32Next(snapshot, pe32)){
std::cout << pe32->szExeFile << "\n";
}
std::cout << "End of list";
CloseHandle( snapshot );
return true;
}
进行此更改后,程序将崩溃,并显示警告“程序停止工作”。
我试图找出问题所在,并确定了以下几点:
如果我使用函数 Process32First() OR Process32Next() 我不能在所有程序中声明相同的 int。
有什么问题?
【问题讨论】:
-
你用什么平台构建这个?什么操作系统版本?你在 Windbg 中跑过吗?
-
我使用开源 Code::blocks 13.12(编译器:GNU GCC Compiler)并在 Windows 10 build 10166 上尝试此操作
标签: c++ winapi c++11 int declaration