【问题标题】:Anyone know how to use WMI with C instead of C++?任何人都知道如何将 WMI 与 C 而不是 C++ 一起使用?
【发布时间】:2008-11-13 09:02:34
【问题描述】:

我不想为了这个而不得不重新学习 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)。

提前致谢。

【问题讨论】:

    标签: c wmi java-native-interface hyper-v


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        @z0ltan

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

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

        【讨论】:

          猜你喜欢
          • 2011-09-17
          • 1970-01-01
          • 1970-01-01
          • 2021-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多