非托管,很好,很强大

偷偷告诉你们,VC++十分强大,强大到你只要接触过C#,然后一定谁谁是开发游戏的你就觉得一定牛B到不行。

然后可能偷偷幻想着自己会点开发,自己又向那未知的黑客技术天才一样又进了一步。

但经过几年沉思之后你又会发现,其实你只是一个普通得不能再普通的码农。

你一定幻想过,你别说话,我也不会去猜你接下来想说什么。

当你接触了一些开发技巧,慢慢的觉得普通的开发业务貌似开始不满足你幻想中的技术的时候,你开始会慢慢的研究一些东西。

比如外挂,比如我自己做个游戏,比如你没做出来的任何东西,但他们都有一个共通点,那就是,你的NET完全无用武之地。

可能好在你在什么时间点知道了XNA也可以利用C#来开发游戏,确实网上也有一些不错的案例,但不多。

可能你上了吾爱破解天天瞎搞一些破解技巧,跟踪软件套件都藏进你的硬盘,OD,CE,IDA……一堆说不上,也无法深入(我也开发过外挂,而且也正常使用,但说白了还是不够高深)。

然后你捣鼓了大半年,浪费了最好的青春后才发现,这些都不在你的天才能理解的范围之内,但他们都可能会和C++之流的东西有交互,因为只有C++之流的东西或者Dephil或者更高级的东西才能满足你对系统的无限渴望。

但我知道,说了半天,你就是想WIN的一些API接口,因为C#的机制,你能能通过系统的底层API,所以由此而引申出,C#也可以很强大,基于什么理由,我不清楚,可能是你认为C#编写基础框架和界面,底层的东西就交个专业的系统API来实现的想法。

由此,就有上面的东西,托管和非托管,啥玩意我解释不清楚,你自己百度,就算我说错了,估计你也不知道,反正对你来说有什么意义,你能在开会的时候说我的项目就是要这样的一种模式,采用托管和非托管云云,你自己都觉得傻叉了不是,人家哪管你什么模式,人家只要你完成项目,爱用什么都可以,只要公司允许,你用汇编完成整个项目也没人会说什么。但前提你得考虑能够让别人维护得了你的这个奇葩项目就是了。

总之不管你的出发点是什么,这个绝对不可能存在的项目启动计划研讨会,会一辈子烂在你心里的。

可实际呢,大范围应用的可能性确实很低,但总归有会用上的时候,比如,隐藏窗体,别人的窗体,对,就是别人的窗体,我C#要隐藏自己算什么需求,加一句代码就行了,这什么烂需求,不知道哪里定的,我也不清楚,但就是要隐藏。

SPY++先了解一下,句柄啥的都能能够找到,句柄啥?这个解释不清楚,是微软一开始就有的,刻在骨子里的东西。

有没有用,当然有用,不过通常还是会利用代码进程去获取指定名称就是了,只是点一下,这个东西,自有它的用处。

然后你可能就随便抄起家伙,开始了各种WIN32的API声明和调用。

可以说你一开始肯定是玩得不亦乐乎,似乎就印证了我最开始提到的,你的任何天才般的想法。

顺我者昌,逆我者“屎”,黑客之道就这这条路上。

然后a few moments later……再过几年之后,你会发现,除了上面你得心应手的几个API,你好像也没有再用其他的多少啊,WIN32API千千万为何只有那几句常用的声明,几个甚至十几个呢。

Why...

不知道,我问我也回答不上来,路是你自己选的,没有人告诉你要这么用,但你就是这么用了。

这个完全没用吗,也不见得,至少你可能在某个项目上用过几句,甚至还高兴了好一阵子,我用它调用VC的动态库,Dephil的动态库,很好的把多个项目的衔接问题给解决了。

这技术是真香,你能说他不香吗。。。

知道a few moments later……在过几年,突然有一个项目,人家就让你对接一些私人开发的硬件,或者大公司开发的硬件,或者某某公司的奇葩软件接口,嘿嘿他们用的就是那些VC之流的东西,以前改搞的也搞了,没差。

然后你又深刻的体会到什么叫不规范,文档不规范,Demo不规范,连环境都不规范。

说好的非托管呢,我也是根据他们文档来的呀,转的没错啊

你就会开始接触更深层次的

Using System.Runtime.InteropServices;



byte[] ImgPlatePath = new byte[nImgPlatePathLen];
Marshal.Copy(szImgPlatePath, ImgPlatePath, 0, nImgPlatePathLen);

之类,甚至是委托,CallBack回调,回调指针,什么鬼的,还是一样的拼命的将各种托管与非托管之间的类型转换之间的博弈。

某个类似只要一对不上就开始找各种奇葩原因,然后类似这样的情形,查找了大半天这东西估计也用上了

 
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szFilePath;

各种结构体,各种指针在你身体里不断的骚动。

char     szDirection[3][256]

=>

[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3 * 256)]
public byte[] szDirection;

骚不骚,很骚,但你总会一眼就能够猜出一大半,剩下的一大半就完全不懂了,就得想老师教的九九乘法表那样,一一对照,运气好,不出问题,运气不好……呵呵……

char    * DevAddress

=》

public IntPtr DevAddress;

就像跟美女聊天一样,当对方打出呵呵的瞬间,你就快速关闭聊天窗,假装她还未发消息,等一天之后再若无其事的再次给她发消息,当然你会自动忽略昨天发的最后一句是啥。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值