为什么.NET Framework就没有个专门的P/Invoke Library?
有个简单的问题: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/ 才是更好的选择。
没有愚蠢的问题,只有愚蠢的答案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库