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

推荐订阅源

Application and Cybersecurity Blog
Application and Cybersecurity Blog
A
About on SuperTechFans
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Help Net Security
Help Net Security
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
O
OpenAI News
美团技术团队
月光博客
月光博客
Apple Machine Learning Research
Apple Machine Learning Research
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
Cyberwarzone
Cyberwarzone
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google Online Security Blog
Google Online Security Blog
T
Tenable Blog
S
Security Affairs
博客园_首页
S
Schneier on Security
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
T
Tailwind CSS Blog
大猫的无限游戏
大猫的无限游戏
Spread Privacy
Spread Privacy
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
TaoSecurity Blog
TaoSecurity Blog
博客园 - 聂微东
Vercel News
Vercel News
M
MIT News - Artificial intelligence
T
Troy Hunt's Blog
B
Blog
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
Attack and Defense Labs
Attack and Defense Labs
L
LINUX DO - 最新话题
D
DataBreaches.Net
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - Franky
W
WeLiveSecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
Check Point Blog
H
Hacker News: Front Page

博客园 - 南柯之石

用户中心 - 博客园 自引用泛型模式分析 一定间隔时间下重复执行一个函数的几个方法 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/ 才是更好的选择。

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