我想向我的调试器添加一个方法,该方法将THREADENTRY32数组与当前正在调试的进程的所有线程一起填充。为此,我想使用“ EnumerateThreads”方法,该方法传递一个THREADENTRY32指针,该指针应填写该函数。

但是,我在使用THREADENTRY32指针作为函数参数时遇到了麻烦。

每当我在头文件中声明这样的函数时,我都会收到C2061错误(“语法错误:标识符'THREADENTRY32'”):


void EnumerateThreads(THREADENTRY32 *threadArray);


如果我正确阅读,头文件已经包含了定义THREADENTRY32结构的文件。

使用自定义结构并将其传递给函数可以正常工作:

结构测试
    {
        int bla;
        DWORD boo;
    };
    [...]
    无效的EnumerateThreads(Test * test);

我曾经使用过int- / char- / float- / etc。数组,但是我对结构数组没有任何经验。
我只是想知道为什么它对我自己的结构有效,但对THREADENTRY32无效。

最佳答案

尝试使用:

void EnumerateThreads(struct THREADENTRY32 *threadArray);


这将内联向前声明该结构,但是,无论您访问该结构的成员还是使用Tlhelp32.h运算符,都需要sizeof中的完整定义。

或者,您需要在原型及其用法的相同转换单元(但位于其前面)中声明结构(通过包含Tlhelp32.h),或为编译器提供前向声明以通过struct THREADENTRY32;绑定到该结构。

10-08 16:58