Использование JNA для вызова функции __cpuid в Windows

Мне нужно получить информацию о процессоре (поставщик, модель и т. д.) в 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., что, вероятно, означает, что я загружаю не ту библиотеку.

Итак, какую библиотеку мне нужно загрузить, чтобы получить доступ к функции __cpuid в Windows?


person Blake Beaupain    schedule 24.10.2012    source источник


Ответы (1)


Поскольку __cpuid является встроенным компилятором (см. MSDN), а не функция, связанная с ней DLL отсутствует. Вам нужно будет написать свой собственный.

person Harry Johnston    schedule 24.10.2012
comment
Некоторые встроенные функции могут быть доступны как функции в дополнение к их встроенным версиям. Системная ошибка указывает на то, что символ __cpuid будет найден в библиотеке интринов. Вы можете проверить, существует ли такая DLL. - person technomage; 24.10.2012
comment
@technomage: я ожидаю, что документация будет отражать существование версии функции там, где она есть. В заголовочных файлах также нет никаких признаков этого. - person Harry Johnston; 25.10.2012