0

我不想为此重新学习 C++!任何图书馆/网址都会很棒,是的,谷歌在这里没有多大帮助:-(

这是针对即将到来的项目,我的产品(基于 Java)将为 Microsoft 的 Hyper-V 虚拟化平台提供支持。与提供 Web 服务的 VMware 不同,Hyper-V API 只是 WMI 的扩展。我不希望使用 J-Integra 等商业工具将 Java 集成到 COM/WMI 中,而且我发现的少数开源工具已经过时了。

我宁愿将 JNI 与 C 一起使用而不是 C++。有人知道我在哪里可以找到使用 C 进行 WMI 操作的库等吗?是否可以像使用 Python 客户端一样使用?(是的,我知道 C 不是 OOP 语言:D)。

提前致谢。

4

3 回答 3

3

WMI 是通过 COM 访问的,对吗?

虽然它更冗长且更容易出错(很容易意外地为 vtable 和“this”参数使用不同的指针),但您也可以使用 C 语言中的 COM。

您也可以使用 C++,但将其视为“带有语言扩展的 C,使使用 COM 更容易”。

于 2008-11-13T10:53:52.227 回答
0

JNI 接口本身是 COM 的衍生物,如果您使用足够多的 C++ 将接口视为由 C++ 类实现,您会发现这些方法和 WMI 接口的方法更容易使用。

另一件有用的事情是,您将能够使用 COM 接口指针和引用计数作为将 COM 接口的生命周期绑定到 JNI 实现的 Java 类的生命周期的一种方式。

我使用这样的方法通过 JNI 实现了一个 Java 桥接器,连接到 Windows 上的一些 C 语言接口。我手工制作了 COM 接口和一个用于构建 JNI DLL 的 .lib。

使用 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 对等部分提供了用于编译通过 JNI 使用的 odmjni100.dll 的 OdmNative100.lib 的实现。

于 2008-11-13T20:34:18.163 回答
0

@z0ltan

您可以用 C 编写代码,但必须将文件另存为 CPP。正如前面有人提到的,要获得 DCOM 支持,您的文件需要是 CPP 文件。

@Umi 用于 Java 集成 - 将 C/CPP 中的 WMI 代码编译为 DLL(带有适当的 JNI 头文件),然后您必须加载 DLL 库文件。完成此操作后,您可以访问 DLL 文件中的 WMI 方法,就像调用 Java 方法一样。

于 2009-01-20T08:51:03.883 回答