惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 最新话题
C
Cyber Attacks, Cyber Crime and Cyber Security
G
GRAHAM CLULEY
T
Tenable Blog
T
Threatpost
C
CXSECURITY Database RSS Feed - CXSecurity.com
I
Intezer
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
K
Kaspersky official blog
Security Latest
Security Latest
P
Privacy & Cybersecurity Law Blog
Google Online Security Blog
Google Online Security Blog
SecWiki News
SecWiki News
P
Palo Alto Networks Blog
TaoSecurity Blog
TaoSecurity Blog
Webroot Blog
Webroot Blog
Spread Privacy
Spread Privacy
O
OpenAI News
The Last Watchdog
The Last Watchdog
P
Proofpoint News Feed
C
Check Point Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
人人都是产品经理
人人都是产品经理
S
Security @ Cisco Blogs
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
月光博客
月光博客
S
Securelist
酷 壳 – CoolShell
酷 壳 – CoolShell
V
V2EX
T
Troy Hunt's Blog
W
WeLiveSecurity
GbyAI
GbyAI
N
News | PayPal Newsroom
Y
Y Combinator Blog
C
Cisco Blogs
H
Help Net Security
The GitHub Blog
The GitHub Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 【当耐特】
Jina AI
Jina AI
MongoDB | Blog
MongoDB | Blog
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
云风的 BLOG
云风的 BLOG
小众软件
小众软件
N
News and Events Feed by Topic

博客园 - 南柯之石

用户中心 - 博客园 自引用泛型模式分析 一定间隔时间下重复执行一个函数的几个方法 Which would you perfer? "easy and fast and works well" or "hard and time consuming and error prone" 在ListView的GroupItem头中显示每列的Summary 小例子背后的大道理——用户需求+设计原则+正确应用 =设计方案 GET和POST有什么区别?及为什么网上的多数答案都是错的。 小例子背后的大道理——Adapter模式详解 小例子背后的大道理——从DIP中“倒置”的含义说接口的正确使用 XmlSerializer, DataContractSerializer 和 BinaryFormatter区别与用法分析 使用WPF开发的扫雷游戏,双系统主题复刻版 技术误用带来的技术偏见及所谓的“经验” 从一个UI交互设计师的讲座说开去 NoSQL和MemeryCache的出现意味着传统数据库使用方式的变革吗? 不使用反射进行C#属性的运行时动态访问 一次模块划分的争论及其结局 电子书籍质量保证事件分析 在SQL Server中调用.NET程序集 T-SQL 操作XML示例
为什么.NET Framework就没有个专门的P/Invoke Library?
南柯之石 · 2013-01-30 · via 博客园 - 南柯之石

有个简单的问题:Looking for Windows API Definitions大体是在问:C#有没有类似C++中使用的windows.h文件?

这真是个愚蠢的问题,是个C#程序员都会知道,C#没有什么头文件的说法。所以答案太简单了:没有 -_-。

是啊,这是个C#程序员都知道的答案。但是怎么依然有人问出这个问题呢?所以,要么问问题的人是个白痴,要么其实是你没理解这个问题。

这个问题的真实目的是,他想要在C#中调用Native Windows API,但是又觉得一个个声明Windows API及其用到的数据结构很繁琐。而在C++中,引入了windows.h之后可以直接调用了。

当然更多的人理解了这个问题,并给出了靠谱些的答案:用http://pinvoke.net/

再进一步想,.NET Framework自己必然也用到了不少Windows API,如果Decompile一个几个.NET Framework的DLL,会发现想要的东西就在Microsoft.Win32下面,可惜的是,全是internal的。我们非得re-create the wheel.

为什么.NET Framework不把这些东西公开出来呢?我猜或许是因为.NET Framework本身应当是平台无关,如果把这些公开出来,使用这些API的代码显然就无法运行在Linux平台上。至于用于自己写PInvoke代码,虽然也让代码无法跨平台,但是这是用户行为,微软是没有负责的。

使用PInvoke并不是单单写写声明那么简单的,还要考虑当前的操作系统支持不支持,不支持有没有Workaround;还要考虑参数的编解码。每次要用PInvoke的时候都要把这些事情重新做一遍一点意义也没有。

所以,http://pinvoke.net/就是个垃圾。http://pinvoke.codeplex.com/ 才是更好的选择。

没有愚蠢的问题,只有愚蠢的答案。