2016-02-21 1 views
4

Я пытаюсь скомпилировать небольшую программу, используя компилятор minGw с кодом :: Blocks. Моя программа выглядит следующим образом:CodeBlock undefined ссылка на функцию Windows API, даже если каталог поиска настроен

#include <stdio.h> 
    #include <stdlib.h> 
    #include <Windows.h> 
    int main() 
    { 
     HWND hwnd = FindWindowA(NULL, "A Valid Window Title"); 
     printf("Window Handle=%X\n", hwnd); 
     DWORD pid = 0; 
     GetWindowThreadProcessId(hwnd, &pid); 
     printf("PID=%d\n", pid); 
     HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); 
     printf("Process HANLDE=%X\n", hProcess); 
     GetProcessId(hProcess); 
     CloseHandle(hProcess); 
     return 0; 
    } 

Однако, Code :: Blocks дает undefined reference to GetProcessId ошибку при попытке компиляции. Если я удалю вызов GetProcessId, программа компилируется и запускается нормально. Я думал, что это сообщение об ошибке вызвано неправильным поиском. Поэтому я пошел в свои настройки и добавил

C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include 
    C:\Program Files (x86)\Windows Kits\8.1\Include\shared 
    C:\Program Files (x86)\Windows Kits\8.1\Include\um 

В мой каталог поиска. Но на этот раз Code :: Blocks дает еще большую ошибку. Возможно, моя вторая мысль была вызвана некоторой ошибкой связи. Поэтому я пошел в свою настройку и явно добавил Kernel32.lib и User32.lib в свой проект. Такая же ошибка сохраняется. Что смущает меня больше, когда я типа GetProcessId, предложение действительно приходит и показывает, что существует функция с именем GetProcessIdenter image description here

чем причина такой проблемы и как решить эту проблему?

+0

Поиск путь не имеет ничего общего с ним. Вы должны связать правильные библиотеки. –

ответ

1

GetProcessId требует как минимум Windows XP SP1. Можно с уверенностью предположить, что никто не использует старые операционные системы, поэтому вы можете добавить #define WINVER 0x0501, чтобы указать минимальную операционную систему. Помещенный это в начале файла или в каком-то .h файл, который используется всеми * .cpp файлов

#define WINVER 0x0501 

#include <stdio.h> 
#include <stdlib.h> 
#include <Windows.h> 

int main() 
{ 
... 
} 

Отредактированный ---- посмотреть комментарии

+0

Я хотел написать '0x0501' для Windows XP, но я поставил' 0x0510'. Я исправил это сейчас. –

Смежные вопросы