2008-11-13 7 views
0

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

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

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

Спасибо заранее.

ответ

3

WMI осуществляется через COM прямо?

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

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

0

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

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

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

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

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

0

@ z0ltan

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

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