繁体   English   中英

在Java上从kernel32.dll调用getversion函数

[英]Calling a getversion function from kernel32.dll on java

我正在尝试从Java上的kernel32.dll调用Getversion函数。 我希望运行一个运行该功能的Java应用程序。 但是,我发现可用的信息非常混乱,无处可寻。

  1. 我已经下载了JNA.jar文件,并将其添加到Java项目的build属性中。
  2. 我已将kernel32.dll放入Java项目的根目录中。

但是从这里开始我一无所知...我是Java的初学者(以及其他地方的程序员)。 有任何想法吗? 提前致谢。

您不需要放入OS运行时已经设置的kernel32.dll。 只要记住,您的路径中某处存在dll。

getVersion函数的原型是这里在MSDN网站。

DWORD WINAPI GetVersion(void);

您可以确认该函数属于“ kernel32”函数。

据我所知,有两种实现方法。

首先,您可以像这样输入主条目

public static void main(String[] args) {
        testGetVersion();
        testGetVersion2();
    }

第二种方法比第一种简单。

private static void testGetVersion2() {
        Function versionFunc = Function.getFunction("kernel32", "GetVersion");
        DWORD versionNum = null;

        versionNum = (DWORD)versionFunc.invoke(DWORD.class, null);


        System.out.println("Version is ... " + versionNum.toString());
    }

让我们更深入地讨论这个主题。

private static void testGetVersion() {
        DWORD versionNum = Kernel32Me.INSTANCE.GetVersion();

        System.out.println("Version is ... " + versionNum.toString());
    }

因此,您应该为Windows系统原型拥有自己的类。 Kernel32Me界面可能有点复杂。

public interface Kernel32Me extends StdCallLibrary {
        final Kernel32Me INSTANCE 
            = (Kernel32Me) Native.loadLibrary("kernel32.dll", Kernel32Me.class, W32APIOptions.DEFAULT_OPTIONS);

        DWORD GetVersion();

    }

我认为您现在可以拥有自己的操作系统版本。

这可能是我回答的重点

祝好运。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM