Массив структуры THREADENTRY32 в качестве параметра функции вызывает C2061

#c #arrays #function #parameters #struct

#c #массивы #функция #параметры #структура

Вопрос:

Я хочу добавить в свой отладчик метод, который заполняет массив THREADENTRY32 всеми потоками процесса, который в данный момент отлаживается. Для этого я хочу использовать метод «EnumerateThreads», которому я передаю указатель THREADENTRY32, который функция должна заполнить.

Однако у меня возникают проблемы с использованием указателя THREADENTRY32 в качестве параметра функции.

Каждый раз, когда я объявляю подобную функцию в своем заголовочном файле, я получаю ошибку C2061 («синтаксическая ошибка: идентификатор ‘THREADENTRY32′»):

 void EnumerateThreads(THREADENTRY32 *threadArray);
  

Файл заголовка уже включает в себя то, что определяет структуру THREADENTRY32, если я правильно прочитал.

Использование пользовательской структуры и передача ее в функцию работает без каких-либо проблем:

struct Test { int bla; DWORD boo; }; […] аннулирует EnumerateThreads(тест *test);

Я работал с массивами int- / char- / float- / etc., Но у меня нет никакого опыта работы со структурными массивами. Мне просто интересно, почему это работает с моими собственными структурами, но не с THREADENTRY32.

Ответ №1:

попробуйте использовать:

 void EnumerateThreads(struct THREADENTRY32 *threadArray);
  

это приведет к прямому объявлению структуры, однако вам потребуется полное определение из Tlhelp32.h того места, где вы обращаетесь к элементам структуры или используете sizeof оператор.

в качестве альтернативы вам нужно объявить структуру (путем включения Tlhelp32.h ) в той же единице перевода (но предшествующей) прототипа и его использования, или предоставить прямое объявление для компилятора для привязки через struct THREADENTRY32;