在 Windows 上使用 JNA 调用 __cpuid 函数

Posted

技术标签:

【中文标题】在 Windows 上使用 JNA 调用 __cpuid 函数【英文标题】:Using JNA to call the __cpuid function on Windows 【发布时间】:2012-10-24 00:15:45 【问题描述】:

我需要在 Java 中获取处理器信息(供应商、型号等)。我通常会使用 C/C++,但不幸的是,对于我当前的项目,这必须在 Java 中完成。我正在使用 JNA 进行本机访问,并且我已将我的 JNA Library 声明如下:

public interface CLibrary extends Library 
    public void __cpuid(int[] CPUInfo, int InfoType);

我正在尝试这样拨打电话:

CLibrary c = (CLibrary) Native.loadLibrary("msvcrt", CLibrary.class);
int[] CPUInfo = new int[4];
c.__cpuid(CPUInfo, 0);

但是我收到了Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'intrin': The specified module could not be found.,这可能意味着我加载了错误的库。

那么我需要加载什么库才能访问 Windows 上的 __cpuid 函数?

【问题讨论】:

【参考方案1】:

由于 __cpuid 是编译器固有的 (see MSDN) 而不是函数,因此没有关联的 DLL。您需要自己编写。

【讨论】:

除了它们的内联版本之外,一些内在函数还可以作为函数使用。系统错误似乎表明“__cpuid”符号将在“intrin”库中找到。您可以检查是否存在这样的 DLL。 @technomage:我希望文档能够反映功能版本的存在。头文件中也没有它的迹象。

以上是关于在 Windows 上使用 JNA 调用 __cpuid 函数的主要内容,如果未能解决你的问题,请参考以下文章

java通过jna调用so

使用JNA 调用WINDOWS API

使用 JNA 本机等待调用检测线程中断 (Windows)

windows下使用JNA在java中调用golang生成的dll

JNA简单范例

JNA简单范例