Как позвонить в WMI используя MinGW - PullRequest
4 голосов
/ 03 апреля 2012

После нескольких дней поиска в Интернете (включая MSDN) способа получения уникальных идентификаторов оборудования с помощью C ++ я обнаружил, что мне нужно использовать WMI.На самом деле я мог бы найти несколько хороших примеров, таких как this one.Проблема в том, что я не могу скомпилировать его с помощью MinGW, однако он довольно хорошо работает на Visual Studio с помощью компилятора Microsoft, но с MinGW (с помощью которого компилируется мое приложение) он дает мне десятки ошибок.Это может показаться старым вопросом, но, к сожалению, я не смог найти решение до сих пор после нескольких дней поиска в Интернете.Я использую MinGW в Windows 7.

Ответы [ 3 ]

4 голосов
/ 28 октября 2012

MinGW не поддерживает WMI.В MinGW64 предпринимаются некоторые усилия, но его по-прежнему нельзя назвать завершенным (например, пропущен wbemuuid.lib).

В некоторых проектах эта проблема решается путем расширения MinGW пропущенными библиотеками WMI из Microsoft WMI SDK или MinGW64.(см. этот проект или этот поток для примеров).

Другое решение для получения UID устройства для вашей конкретной задачи может заключаться в использовании Windows Setup API, который хорошо поддерживаетсяМинГВ.Отличный пример его использования можно найти на сайте CodeProject .

1 голос
/ 03 апреля 2012

MinGW должен позволять вам получать доступ к API Win32 без использования Visual Studio.

Следующее должно скомпилироваться и работать с MinGW.

#include <windows.h>
#include <stdio.h>

int main()
{
   SYSTEM_INFO siSysInfo;

   // Copy the hardware information to the SYSTEM_INFO structure. 

   GetSystemInfo(&siSysInfo); 

   // Display the contents of the SYSTEM_INFO structure. 

   printf("Hardware information: \n");  
   printf("  OEM ID: %u\n", siSysInfo.dwOemId);
   printf("  Number of processors: %u\n", 
      siSysInfo.dwNumberOfProcessors); 
   printf("  Page size: %u\n", siSysInfo.dwPageSize); 
   printf("  Processor type: %u\n", siSysInfo.dwProcessorType); 
   printf("  Minimum application address: %lx\n", 
      siSysInfo.lpMinimumApplicationAddress); 
   printf("  Maximum application address: %lx\n", 
      siSysInfo.lpMaximumApplicationAddress); 
   printf("  Active processor mask: %u\n", 
      siSysInfo.dwActiveProcessorMask); 

   return 0;
}

Дополнительное чтение, чтобы помочь вам получитьначало.

0 голосов
/ 03 апреля 2012

Ознакомьтесь с справочником Microsoft

Информация о системе Win API

...