Кто-нибудь знает, как использовать WMI с C вместо C ++? - PullRequest
0 голосов
/ 13 ноября 2008

Я бы не хотел переучивать C ++ только для этого! Любые библиотеки / URL-адреса были бы хорошими, и да, Google не сильно помог здесь :-(

Это для предстоящего проекта, в котором мой продукт (на основе Java) обеспечит поддержку платформы виртуализации Microsoft Hyper-V. В отличие от VMware, предоставляющего Web-сервис, API-интерфейсы Hyper-V являются просто расширениями WMI. Я бы предпочел не использовать коммерческие инструменты, такие как J-Integra для интеграции Java в COM / WMI, и несколько инструментов с открытым исходным кодом, которые я нашел, устарели.

Я бы предпочел использовать JNI с C, а не с C ++. Кто-нибудь знает, где я могу найти библиотеки и так далее для использования C для операций WMI? В том же духе, что и клиенты Python? (И да, я знаю, что C не является языком ООП: D).

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 13 ноября 2008

WMI доступен через COM, верно?

Хотя это более многословно и более подвержено ошибкам (легко использовать разные указатели для vtable и параметра "this"), вы также можете использовать COM из языка C.

Вы также можете использовать C ++, но трактовать его как «C с языковыми расширениями, упрощающими использование COM».

0 голосов
/ 20 января 2009

@ z0ltan

Вы можете написать свой код на C, но вам придется сохранить файл как CPP. Как уже упоминалось ранее, для поддержки DCOM ваш файл должен быть файлом CPP.

@ Umi Для интеграции с Java - скомпилируйте ваш код WMI в C / CPP в виде DLL (с ​​соответствующими заголовочными файлами JNI), а затем вам нужно будет загрузить файл библиотеки DLL. Как только это будет сделано, вы можете получить доступ к методам WMI в файлах DLL, как при вызове метода Java.

0 голосов
/ 13 ноября 2008

Сам интерфейс JNI является производным от COM, и вы найдете эти методы и методы интерфейсов WMI гораздо более простыми в использовании, если вы будете использовать достаточно C ++ для обработки интерфейсов, реализованных в классах C ++.

Другая полезная вещь - это то, что вы сможете использовать указатели интерфейса COM и подсчет ссылок как способ привязки жизненного цикла интерфейса COM к жизненному циклу ваших Java-классов, реализованных с помощью JNI.

Я использовал такой подход для реализации моста Java через JNI для некоторых интерфейсов языка C в Windows. Я свернул вручную COM-интерфейсы и .lib, который используется при сборке JNI DLL.

Сложная часть работы с WMI состоит в том, что вы захотите использовать стандартные API-интерфейсы COM для создания экземпляров COM-объектов, тогда как я создал свой собственный «фабричный» код, поскольку все это была частная реализация.

Вы можете загрузить снимок моего дерева разработки для функциональной полной версии ODMJNI 1.0 0.50beta . Если вы посмотрите на info.odma.odmjni100 в дереве разработки, вы увидите, как создается JNI DLL (с ​​использованием VC ++ 2005 Express Edition) и Java 1.5. Класс OdmJniBind.java состоит из статических методов, которые используются в классах Java для координации жизненных циклов объектов между классами Java и интерфейсами COM-объектов. (Одноранговый раздел дерева OdmNative обеспечивает реализацию файла OdmNative100.lib, который используется при компиляции файла odmjni100.dll, который используется через JNI.

...