首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#中的CPUID支持

C#中的CPUID支持
EN

Stack Overflow用户
提问于 2012-03-03 04:11:03
回答 2查看 1K关注 0票数 0

上个星期我一直把头撞在砖墙上。那堵砖墙: CPUID。

我偶然发现的所有东西都说要在C++中构建一个类库,实现CPUID,然后在C#项目中使用它。

由于各种原因,我无法让C++类库在我的C#项目中正常工作,而且我即将放弃并告诉客户机他们的请求无法满足。然而,我已经筋疲力尽了,我想乞求帮助。

是否有任何方法可以让__cpuid()或asm在无需构建外部程序集的情况下在C#中编译?

EN

回答 2

Stack Overflow用户

发布于 2012-03-03 04:46:52

需要一个非C#程序集,因为C#编译器会生成纯MSIL,并且没有CPUID的MSIL指令。您所链接的问题包括CPUID作为数据,而不是代码,这是非常脆弱的,您必须在.NET外部调用Win32 API来标记数据可执行文件,这似乎与您对“没有外部程序集”的要求相矛盾。

但是,您可以将C#代码编译为.netmodule,并使用C++/CLI链接器将一些使用C#编译器输出的函数组合在一起。您最终将得到一个由C++/CLI工具链生成的单一混合模式程序集,但其中大部分都是用C#编写的。

对于此选项,最简单的方法可能是从调用C#的代码中创建一个Func<uint>Func<uint, uint>委托,并将该委托传递给C#代码,而不是试图让C#代码按名称调用函数(这避免了两个项目之间的循环引用)。

票数 0
EN

Stack Overflow用户

发布于 2012-03-09 09:35:51

实际上..。我从来没有这样做过,如果您希望您的代码是可移植的,甚至是与未来的.NET版本兼容的话,这是不建议的。然而:

http://www.atrevido.net/blog/2005/01/28/Inline+X86+ASM+In+C.aspx

这似乎是个很酷的把戏。注意,在较新的操作系统中,数据被标记为非可执行的(NX或DEP或任何MS称为它的东西)。C#中的数组是数据。页面上的最后一条评论给出了解决这一问题的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9543368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档