BAO BAO 2015-01-20 09:56 采纳率: 100%
浏览 1645
已采纳

请大家帮我看看两段代码的区别真想不明白了

有两段代码 代码一是单独写成函数来调用的, 我把他们合成一个主函数的代码 就出错  好像是变量递增的问题,我怎么也想不通,麻烦大家了。

代码一  别人写的:
#include
#include
#include
#include
#pragma comment(lib,"Psapi.lib")

int FindModules( DWORD processID )
{
    HMODULE hMods[1024];
    HANDLE hProcess;
    DWORD cbNeeded;
    unsigned int i;

    // Get a handle to the process.
    hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID );
    if (NULL == hProcess) return 1;

   // Get a list of all the modules in this process.
    if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
    {
        for ( i = 0; i < (cbNeeded / sizeof(HMODULE)); i++ )
        {
            TCHAR szModName[MAX_PATH];
            if (GetModuleBaseName(hProcess, hMods[i], szModName,sizeof(szModName) / sizeof(TCHAR)))
            {
if(strcmp(szModName,"sfc.dll")==0) 
{
printf("%s PID:%d\n",szModName,processID);
break;
}
            }
        }
    }
    CloseHandle( hProcess );
    return 0;
}

int main( void )
{
    DWORD aProcesses[1024]; 
    DWORD cbNeeded; 
    unsigned int i;

    // Get the list of process identifiers.
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 1;

    // Print the names of the modules for each process.
    for ( i = 0; i < cbNeeded / sizeof(DWORD); i++ )
    {
        FindModules( aProcesses[i] );
    }

    return 0;
}

代码2:我想合到一个函数中:

#include
#include
#include
#pragma comment(lib,"Psapi.lib")

int main( void )
{
    DWORD aProcesses[1024]; 
    DWORD cbNeeded; 
    unsigned int i;

HMODULE hMods[1024];
HANDLE hProcess;
DWORD cbNeeded2;
unsigned int ii;

    // Get the list of process identifiers.
    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) ) return 1;

    // Print the names of the modules for each process.
    for ( i = 0; i < cbNeeded / sizeof(DWORD); i++ )
    {
        // 错误下面这句,分开些函数就没问题 i都等于0,写在一个函数里 就不行了,就返回2,必须把i加1,跳过过pid为0才行.
hProcess = OpenProcess( PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, aProcesses[i+1] );//我直接用aProcesses[i]怎么不行啊?
if (NULL == hProcess) return 2;

   // Get a list of all the modules in this process.
    if( EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded2))
    {
        for ( ii = 0; ii < (cbNeeded2 / sizeof(HMODULE)); ii++ )
        {
            TCHAR szModName[MAX_PATH];
            if (GetModuleBaseName(hProcess, hMods[ii], szModName,sizeof(szModName) / sizeof(TCHAR)))
            {
                if(strcmp(szModName,"sfc.dll")==0) 
                {
                    printf("%s  PID:%d\n",szModName,aProcesses[i+1]);
                    break;
                }
            }
        }
        CloseHandle( hProcess );
    }
}

    return 0;
}

  • 写回答

3条回答 默认 最新

  • BAO BAO 2015-01-21 05:40
    关注

    基础太差了 单独写成函数是循环来调用,遇到pid=0的虽然失败 但循环下一个, 合写在一个主函数的时候没仔细看代码 直接把上面的return 给挪下来了,这就出现了id写成aProcesses[i] 会失败返回 写成aProcesses[i+1]就跳过pid=0了。或者把return 换成continue就ok了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog