博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么.NET Framework就没有个专门的P/Invoke Library?
阅读量:6973 次
发布时间:2019-06-27

本文共 717 字,大约阅读时间需要 2 分钟。

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

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

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

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

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

再进一步想,.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://zuesl.baihongyu.com/

你可能感兴趣的文章
iOS的Cookie存取看我绝对够!!
查看>>
Java工程师如何在1个月内做好面试准备?
查看>>
少走弯路,给Java 1~5 年程序员的建议
查看>>
纯链式golang http请求库, 支持HTTP代理
查看>>
类的扩充 js中面向对象的技术
查看>>
一名3年工作经验的java程序员应该具备的职业技能
查看>>
短网址(short URL)系统的原理及其实现
查看>>
azkaban 安装
查看>>
【290天】我爱刷题系列049(2017.11.22)
查看>>
java重写equals及hashcode方法
查看>>
刷新本地的DNS缓存数据
查看>>
AI、量子计算引爆硬科技创新,雷鸣、王海峰、施尧耘等北大120周年论道信科最前沿...
查看>>
为什么物联网和区块链彼此依赖?
查看>>
(桌面虚拟化最佳实践--呼叫中心系统优化之四)瘦终端优化项目与其他优化项目...
查看>>
自学社交的人工智能,会不会有一天取人类而代之?
查看>>
微信的视频如何找到文件并发送到电脑
查看>>
ionic react-native和native开发移动app到底那个好
查看>>
分布式全局锁
查看>>
谈谈17年工业届三个热点词汇的个人见解
查看>>
怎样自动生成makefile
查看>>