#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;