【问题标题】:CPUID support in C#C# 中的 CPUID 支持
【发布时间】:2012-03-21 13:13:05
【问题描述】:
上周我一直在用头撞砖墙。那堵墙:CPUID。
我偶然发现的所有内容都说要在 C++ 中构建一个实现 CPUID 的类库,然后在 C# 项目中使用它。
由于各种原因,我一直无法让 C++ 类库在我的 C# 项目中正常工作,我正要放弃并告诉客户他们的请求不能履行。但是,我已经走投无路了,想寻求帮助。
有没有ANY 方法可以让 __cpuid() 或 asm 在 C# 中编译而无需构建外部程序集?
【问题讨论】:
标签:
c#
visual-studio-2008
cpuid
【解决方案1】:
需要非 C# 程序集,因为 C# 编译器生成纯 MSIL,并且没有针对 CPUID 的 MSIL 指令。您链接的问题包括作为数据的 CPUID,而不是代码,它非常脆弱,您必须在 .NET 外部调用 Win32 API 来标记数据可执行文件,这似乎与您对“无外部程序集”的愿望相矛盾。
但是,您可以将 C# 代码编译为 .net 模块,并使用 C++/CLI 链接器将一些使用 CPUID 的函数与 C# 编译器的输出相结合。您最终会得到一个由 C++/CLI 工具链生成的混合模式程序集,但其中大部分是用 C# 编写的。
对于此选项,最简单的方法可能是从调用 CPUID 的代码创建 Func<uint> 或 Func<uint, uint> 委托,并将该委托传递给 C# 代码,而不是尝试让 C# 代码调用函数按名称(这避免了两个项目之间的循环引用)。