任何人都知道如何使用C而不是C ++ WMI?

时间:2008-11-13 09:02:34

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

我不想为此重新学习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)。

提前致谢。

3 个答案:

答案 0 :(得分:3)

WMI是通过COM获得的吗?

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

您也可以使用C ++,但将其视为“C语言扩展,以便更轻松地使用COM”。

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

答案 2 :(得分:0)

@ z0ltan

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

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