Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;|如何返回所有PID';功能的结果是什么? < >我想从C++中返回一个函数,它是用C++来运行的。_C++_Arrays_Visual C++_Arraylist - Fatal编程技术网

C++;|如何返回所有PID';功能的结果是什么? < >我想从C++中返回一个函数,它是用C++来运行的。

C++;|如何返回所有PID';功能的结果是什么? < >我想从C++中返回一个函数,它是用C++来运行的。,c++,arrays,visual-c++,arraylist,C++,Arrays,Visual C++,Arraylist,我使用以下函数枚举列表: DWORD* xEnumProcs(){ PROCESSENTRY32 pe32; HANDLE snapshot = NULL; DWORD pid[1024]; DWORD* pointer; pointer = pid; int I = 0; snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (snapshot != INV

我使用以下函数枚举列表:

DWORD* xEnumProcs(){
    PROCESSENTRY32 pe32;
    HANDLE snapshot = NULL;
    DWORD pid[1024];
    DWORD* pointer;
    pointer = pid;
    int I = 0;

    snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot != INVALID_HANDLE_VALUE) {
        pe32.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(snapshot, &pe32)) {
            do {
                pid[I] = pe32.th32ProcessID;
                I++;
            } while (Process32Next(snapshot, &pe32));
        }

        CloseHandle(snapshot);

    }

    return pointer;

}
'initializing' : cannot convert from 'DWORD *(__cdecl *)(void)' to 'DWORD *'
1>          There is no context in which this conversion is possible
我不确定这是否正确完成。我试图在另一个函数中使用此数组,如下所示:

void HandleProcs(){
    DWORD* xNewProcs = xEnumProcs;
}
这是我在最后一个函数体的一行上收到的错误:

DWORD* xEnumProcs(){
    PROCESSENTRY32 pe32;
    HANDLE snapshot = NULL;
    DWORD pid[1024];
    DWORD* pointer;
    pointer = pid;
    int I = 0;

    snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot != INVALID_HANDLE_VALUE) {
        pe32.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(snapshot, &pe32)) {
            do {
                pid[I] = pe32.th32ProcessID;
                I++;
            } while (Process32Next(snapshot, &pe32));
        }

        CloseHandle(snapshot);

    }

    return pointer;

}
'initializing' : cannot convert from 'DWORD *(__cdecl *)(void)' to 'DWORD *'
1>          There is no context in which this conversion is possible

我认为您已经得到了答案,但为了学习,请在此处比较C版本:

#include <stdio.h>  // printf
#include <Windows.h>
#include <Tlhelp32.h>

DWORD *EnumProcs(size_t *n)
{
    DWORD *pids = NULL;
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    *n = 0;
    if (snapshot != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32 = { sizeof(pe32) };
        if (Process32First(snapshot, &pe32))
        {
            do { ++*n; } while (Process32Next(snapshot, &pe32));
            pids = calloc(*n, sizeof(pe32.th32ProcessID));
            *n = 0;
            Process32First(snapshot, &pe32);  // Maybe check return value
            do { pids[(*n)++] = pe32.th32ProcessID; }
            while (Process32Next(snapshot, &pe32));
        }
        CloseHandle(snapshot);
    }
    return pids;
}
int main()
{
    size_t i, n;
    DWORD *pids = EnumProcs(&n);
    for (i = 0; i < n; i++)
    { printf("%u\n", pids[i]); }
    free(pids);
}
#包括//printf
#包括
#包括
DWORD*EnumProcs(大小\u t*n)
{
DWORD*pids=NULL;
HANDLE snapshot=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
*n=0;
if(快照!=无效的\u句柄\u值)
{
PROCESSENTRY32 pe32={sizeof(pe32)};
if(Process32First(快照和pe32))
{
执行{++*n;}while(Process32Next(snapshot,&pe32));
pids=calloc(*n,sizeof(pe32.th32ProcessID));
*n=0;
Process32First(快照,&pe32);//可能会检查返回值
do{pids[(*n)+]=pe32.th32ProcessID;}
while(Process32Next(snapshot,&pe32));
}
CloseHandle(快照);
}
返回PID;
}
int main()
{
尺寸i,n;
DWORD*pids=枚举过程(&n);
对于(i=0;i
<> > C++版本:

#include <iostream>  // std::cout
#include <vector>  // std::vector, like List<T> in C# (or ArrayList<T> in Java)
#include <Windows.h>
#include <Tlhelp32.h>

std::vector<DWORD> EnumProcs()
{
    std::vector<DWORD> pids;
    HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (snapshot != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
        if (Process32First(snapshot, &pe32))
        {
            do
            {
                pids.push_back(pe32.th32ProcessID);
            } while (Process32Next(snapshot, &pe32));
        }
        CloseHandle(snapshot);
    }
    return pids;
}
int main()
{
    std::vector<DWORD> pids = EnumProcs();
    for (size_t i = 0; i < pids.size(); i++)
    { std::cout << pids[i] << std::endl; }
}
#包括//std::cout
#include//std::vector,如C#中的列表(或Java中的ArrayList)
#包括
#包括
std::vector EnumProcs()
{
std::载体pids;
HANDLE snapshot=CreateToolhelp32Snapshot(TH32CS\u SNAPPROCESS,0);
if(快照!=无效的\u句柄\u值)
{
PROCESSENTRY32 pe32={sizeof(PROCESSENTRY32)};
if(Process32First(快照和pe32))
{
做
{
pids.推回(pe32.th32ProcessID);
}while(Process32Next(snapshot,&pe32));
}
CloseHandle(快照);
}
返回PID;
}
int main()
{
std::vector pids=EnumProcs();
对于(size_t i=0;i{STD::CUTE使用代码> STD::vector < /Cord>,并且,您不调用该函数。还有其他问题,但是编译器错误是试图将函数指针分配给<代码> dWord < /C> >使用<代码> /Cord>运算符。<代码> dWord xNeXPROS= ExeUnPcSub():<代码> >学习C++吗?(来自VB的我猜)?同时你正在学习Windows API?因为你得到的结果是一个普通的C++问题,而不是直接与Windows API有关。@ Mehrdad,是的,我正在学习C++。我实际上是来自Delphi。我在一段时间以前学习过VB,但从来没有真正用C语言来搞乱。“成语”(至少是RAI)如果你走C++路线。起初,“成语”看起来很傻(看起来就像是你可以忽略的训练轮)。…但一旦你了解了它们为什么会被发明,你就会感激它们,并意识到为什么它们是编写好代码的必要条件。我喜欢它。谢谢你这么做。@Mehrdad我真的很感激你的回答。非常有帮助。谢谢你。