实现"IsProcessorFeaturePresent" C++
Realization of "IsProcessorFeaturePresent" on C++
帮助请从C#到C
重新制作一小部分代码class Program
{
static void Main(string[] args)
{
foreach (ProcessorFeature feature in System.Enum.GetValues(typeof(ProcessorFeature)))
{
System.Console.WriteLine(feature.ToString() + "t: " + IsProcessorFeaturePresent(feature));
}
}
[System.Runtime.InteropServices.DllImport("Kernel32")]
static extern bool IsProcessorFeaturePresent(ProcessorFeature processorFeature);
enum ProcessorFeature : uint
{
PF_FLOATING_POINT_PRECISION_ERRATA = 0,
PF_FLOATING_POINT_EMULATED = 1,
PF_COMPARE_EXCHANGE_DOUBLE = 2,
PF_MMX_INSTRUCTIONS_AVAILABLE = 3,
PF_PPC_MOVEMEM_64BIT_OK = 4,
PF_ALPHA_BYTE_INSTRUCTIONS = 5,
PF_XMMI_INSTRUCTIONS_AVAILABLE = 6,
PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7,
PF_RDTSC_INSTRUCTION_AVAILABLE = 8,
PF_PAE_ENABLED = 9,
PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10,
PF_SSE_DAZ_MODE_AVAILABLE = 11,
PF_NX_ENABLED = 12,
PF_SSE3_INSTRUCTIONS_AVAILABLE = 13,
PF_COMPARE_EXCHANGE128 = 14,
PF_COMPARE64_EXCHANGE128 = 15,
PF_CHANNELS_ENABLED = 16,
PF_XSAVE_ENABLED = 17,
PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20,
PF_VIRT_FIRMWARE_ENABLED = 21,
}
}
我正在尝试创建枚举,但是编译器写入"需要标识符"。
编译器写道," winnt.h"中已经有一个定义
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
我如MSDN中所述连接了库。
#include <winnt.h>
#pragma comment (lib, "Kernel32.lib")
我什至不知道在C 上如何实现" foreach"。
因为C 没有反射,因此访问枚举的名称似乎很困难。但是串起的操作员非常适合:
#define VAL_AND_NAME(x) { x, #x }
struct { int val; const char* name; } const features[] = {
VAL_AND_NAME(PF_FLOATING_POINT_PRECISION_ERRATA),
VAL_AND_NAME(PF_FLOATING_POINT_EMULATED),
VAL_AND_NAME(PF_COMPARE_EXCHANGE_DOUBLE),
VAL_AND_NAME(PF_MMX_INSTRUCTIONS_AVAILABLE),
VAL_AND_NAME(PF_PPC_MOVEMEM_64BIT_OK),
VAL_AND_NAME(PF_ALPHA_BYTE_INSTRUCTIONS),
VAL_AND_NAME(PF_XMMI_INSTRUCTIONS_AVAILABLE),
VAL_AND_NAME(PF_3DNOW_INSTRUCTIONS_AVAILABLE),
VAL_AND_NAME(PF_RDTSC_INSTRUCTION_AVAILABLE),
VAL_AND_NAME(PF_PAE_ENABLED),
VAL_AND_NAME(PF_XMMI64_INSTRUCTIONS_AVAILABLE),
VAL_AND_NAME(PF_SSE_DAZ_MODE_AVAILABLE),
VAL_AND_NAME(PF_NX_ENABLED),
VAL_AND_NAME(PF_SSE3_INSTRUCTIONS_AVAILABLE),
VAL_AND_NAME(PF_COMPARE_EXCHANGE128),
VAL_AND_NAME(PF_COMPARE64_EXCHANGE128),
VAL_AND_NAME(PF_CHANNELS_ENABLED),
VAL_AND_NAME(PF_XSAVE_ENABLED),
VAL_AND_NAME(PF_SECOND_LEVEL_ADDRESS_TRANSLATION),
VAL_AND_NAME(PF_VIRT_FIRMWARE_ENABLED),
};
现在您有了(值,名称(对的数组,您只需循环。远程语法效果很好:
char buffer[1000];
for( auto f : features ) {
wsprintfA(buffer, "%40s : %sn",
f.name, IsProcessorFeaturePresent(f.val)? "true": "false");
// write buffer to standard output or wherever you like
}
相关文章:
- 没有找到相关文章